Spring & Springboot

[스프링/Spring] DTO는 왜 써야 하나?

1. 고민? DTO(Data Transfer Object)란 계층간 데이터 교환을 위해 사용하는 객체입니다. 아래 코드를 보면서 DTO는 왜 필요한가에 대해 생각해보겠습니다. * 실제 간단한 엔티티 설계의 일부입니다. 위 예제 코드는 Posts라는 엔티티를 생성하는 코드입니다. 맨 처음에 PostsSaveReqeustDto라는 Dto 객체를 빌더 패턴으로 생성하고 Dto를 컨트롤러에게 던져줍니다. 컨트롤러는 해당 Dto를 다시 Service에게 넘겨주고, Service 딴에서 JPA를 이용하여 생성된 객체를 저장합니다. "그런데 DTO와 Entity는 거의 똑같은 것 같은데, 왜 변환을 해서 사용해야 하며, 그렇다면 언제 DTO가 필요할까요?" 2. 언제, 왜 DTO를? 몇 가지 책과 기술 블로그를 참고..

2021.09.07 게시됨

Algorithm

[프로그래머스(파이썬/Python)] 거리두기 확인하기(2021 카카오 개발자 인턴십)

https://programmers.co.kr/learn/courses/30/lessons/81302 코딩테스트 연습 - 거리두기 확인하기 [["POOOP", "OXXOX", "OPXPX", "OOXOX", "POXXP"], ["POOPX", "OXPXP", "PXXXO", "OXXXO", "OOOPP"], ["PXOPX", "OXOXP", "OXPOX", "OXXOP", "PXPOX"], ["OOOXX", "XOOOX", "OOOXX", "OXOOX", "OOOOO"], ["PXPXP", "XPXPX", "PXPXP", "XPXPX", "PXPXP"]] [1, 0, 1, 1, 1] programmers.co.kr 이 문제는 실제 인턴십 지원을 했을 때 봤던 코딩테스트에서 굉장히 빨리 풀었던 문제입니다...

2021.09.06 게시됨

Algorithm

[프로그래머스(파이썬/Python)] 후보키(2019 카카오 블라인드)

https://programmers.co.kr/learn/courses/30/lessons/42890 코딩테스트 연습 - 후보키 [["100","ryan","music","2"],["200","apeach","math","2"],["300","tube","computer","3"],["400","con","computer","4"],["500","muzi","music","3"],["600","apeach","music","2"]] 2 programmers.co.kr 카카오 기출 문제는 꼭 한 번씩 2~3개의 테스트케이스가 틀리는 경우가 많은 것 같습니다. 맞왜틀도 실력이라고 생각하기 때문에 아직 갈 길이 먼 것 같습니다... 이 문제는 주어지는 컬럼의 수가 1이상 8이하이고, 릴레이션의 개수도 20이하..

2021.09.06 게시됨

Algorithm

[프로그래머스(파이썬/Python)] 모음사전

https://programmers.co.kr/learn/courses/30/lessons/84512 코딩테스트 연습 - 5주차_모음사전 사전에 알파벳 모음 'A', 'E', 'I', 'O', 'U'만을 사용하여 만들 수 있는, 길이 5 이하의 모든 단어가 수록되어 있습니다. 사전에서 첫 번째 단어는 "A"이고, 그다음은 "AA"이며, 마지막 단어는 "UUUUU"입니 programmers.co.kr 애초에 문제에서 만들 수 있는 단어의 모든 가지 수가 크지 않았기 때문에 중복 순열을 이용해서 풀 수 있었습니다. 단어의 길이가 1부터 5까지인 모든 단어를 리스트에 입력한 뒤 정렬을 하고, 해당 단어가 몇 번째에 있는지 index 내장 함수로 찾아주기만 하면 되겠죠! 풀이는 아래와 같습니다. [풀이] fro..

2021.09.06 게시됨

CS/Network

[네트워크/Network] http와 https는 뭐가 다른거야?(feat. SSL, TLS)

💡 0. 들어가면서 1990년대 초, 우리가 많이 들어본 월드 와이드 웹(WWW)이 등장했습니다. 월드 와이드 웹은 온-디맨드(On-demand) 방식으로 동작하면서, 사용자들이 원할 때 원하는 것을 수신할 수 있도록 해주었죠. 웹을 통해 사람들은 어떤 정보에 대해 쉽게 접근할 수 있게 되었고, 모든 사람이 매우 낮은 비용으로 웹에 컨텐츠를 퍼블리시할 수 있게 되었습니다. 또한 웹과 관련된 프로토콜은 유튜브, 웹-기반 이메일, 인스타그램 등 대부분의 모바일 인터넷 애플리케이션을 위한 플랫폼을 제공하게 되었습니다. 월드 와이드 웹에 대해서 더 깊게 설명하는 것은 잠시 미뤄두고, 다음의 세 가지 기능으로 월드 와이드 웹을 요약할 수 있을 것 같습니다. 첫 번째 통일된 웹 자원의 위치 지정 방법 예를 들면 U..

2021.09.06 게시됨

Algorithm

[프로그래머스(파이썬/Python)] 보석 쇼핑(2020 카카오 개발자 인턴십)

https://programmers.co.kr/learn/courses/30/lessons/67258 코딩테스트 연습 - 보석 쇼핑 ["DIA", "RUBY", "RUBY", "DIA", "DIA", "EMERALD", "SAPPHIRE", "DIA"] [3, 7] programmers.co.kr 카카오의 효율성 문제를 풀면 눈물이 납니다. 이 문제를 풀 때도 1) O(N^2)으로 몇 가지 트릭을 넣은 풀이, 2) 이분 탐색으로 O(N*logN), 두 가지 방법을 시도해보았지만 모두 다 효율성 테스트를 통과하지 못했습니다... 사실, 이 문제에서 투 포인터를 써야겠다는 생각은 바로 들었지만 뭔가 계속 구현이 꼬이고 몇 가지 테스트 케이스가 틀리고를 반복하다보니 다른 방법으로 회피한 것 같은 느낌도 있었습..

2021.09.03 게시됨

Algorithm

[백준(파이썬/Python)] 1644_소수의 연속합(투 포인터, 에라토스테네스의 체)

https://www.acmicpc.net/problem/1644 1644번: 소수의 연속합 첫째 줄에 자연수 N이 주어진다. (1 ≤ N ≤ 4,000,000) www.acmicpc.net N이 클 때 소수 판별을 효율적으로 할 수 있는 에라토스테네스의 체와 투포인터 개념을 활용하는 문제입니다. 에라토스테네스의 체는 소수 판별할 때 대표적인 알고리즘으로 "임의의 정수 x가 소수라면, x의 배수는 소수가 아니다"라는 명제를 이용해 구현하는데요. 이를 구현하는 방법은 아래 코드에서 prime_list() 함수로 구현되어 있습니다. 한편, 문제에서 구하고자 하는 것은 어떤 수 N을 연속한 소수의 합으로 나타낼 수 있는 경우의 수입니다. 따라서, 에라토스테네스의 체로 구한 N보다 작은 소수들의 집합을 리스트로..

2021.08.30 게시됨

Spring & Springboot

[스프링(Spring)] @Autowired 조회 대상 빈이 여러 개일때는 어떻게 할까? (feat.NoUniqueBeanDefinitionException)

📒 들어가면서 의존관계 주입을 할 때 사용하는 @Autowired 어노테이션은 기본적으로 스프링 빈을 타입(Type)으로 조회합니다. 예를 들어 아래처럼 할인정책에 관한 내용을 담고 있는 discountPolicy에 대한 의존관계를 주입한다고 해봅시다. @Autowired private DiscountPolicy discountPolicy 이 때, discountPolicy 인터페이스에는 각각 다른 할인 정책을 구현한 여러가지 구현체들이 있을 것입니다(discountPolicy1, discountPolicy2,...,discountPolicyN). 만약 이 상황에서 아래와 같이 DiscountPolicy의 하위 타입인 FixDiscountPolicy, RateDiscountPolicy를 둘 다 스프링 빈..

2021.08.30 게시됨

Algorithm

[프로그래머스(파이썬/Python)] 수식 최대화(2020 카카오 블라인드 채용)

https://programmers.co.kr/learn/courses/30/lessons/67257 코딩테스트 연습 - 수식 최대화 IT 벤처 회사를 운영하고 있는 라이언은 매년 사내 해커톤 대회를 개최하여 우승자에게 상금을 지급하고 있습니다. 이번 대회에서는 우승자에게 지급되는 상금을 이전 대회와는 다르게 다음과 programmers.co.kr 2020년 카카오 블라인드 채용에 있는 문제로, 문제의 요구사항을 충실히 구현하면 되는 문제입니다. 우선 문자열로 주어진 expression을 splitExpression() 함수를 구현해서 숫자와 연산자 집합으로 분리를 했습니다. 문제 조건에서 "-56+100"처럼 피연산자가 음수인 수식도 입력으로 주어지지 않습니다. 라는 내용이 있기 때문에, numbers..

2021.08.29 게시됨

Algorithm

[백준(파이썬/Python)] 9663_N-Queen - 백트랙킹

https://www.acmicpc.net/problem/9663 9663번: N-Queen N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오. www.acmicpc.net N-Queen 문제는 N*N 체스판에 상하좌우, 대각선에 퀸이 존재하지 않도록 적절히 퀸을 위치하는 문제입니다. 백트랙킹으로 풀 수 있는 대표적인 문제죠. 이 문제는 시간 제한이 상당히 타이트한데, 파이썬으로 제출할 경우 이차원 배열을 쓰면 당연히 시간초과가 나고 최적화를 해서 제출해야만 정답 판정을 받을 수 있습니다...ㅠㅠ 문제를 푸는 아이디어는 다음과 같습니다. 1. 각 행마다 Queen은 하나만 존재해야 ..

2021.08.29 게시됨