데이터베이스 기본키 생성 전략
·
BE/개발일지
개발을 하다보면 DB연결을 통해 자바 객체를 데이터베이스에 저장하곤 한다.이 과정에서 PK를 개발자가 직접 지정하지 않는다.보통 아래와 같은 방식으로 pk외의 다른 컬럼에 대한 값을 지정하고 save를 하는 시점에서 자동으로 PK가 결정되게 한다.@Builderpublic Property(String zipCode, String roadNameAddress, String landLotNameAddress) { this.zipCode = zipCode; this.roadNameAddress = roadNameAddress; this.landLotNameAddress = landLotNameAddress;}기본 키는 기본 키 제약조건에 의해 아래와 같은 조건을 만족해야한다.기본 키 제약조건n..
[프로그래머스: 입국심사 Java] 매개 변수 탐색
·
Algorithm/백준 문제풀이
다시 코테를 준비하는 요즘, 쉽다고 생각했던 이분탐색 문제가 조금 더 어려운 난이도로 등장해 애를 먹은적이 많다. 최근 치른 많은 코테에서 매개변수 탐색 문제를 쉽게 볼 수 있는데 관련해서 공부한 글을 정리해볼까 한다. 사실 어느정도 안다고 자신했는데, 우테캠 코테에서 최적화를 실패해 ,, 결국 탈락했으니 소 잃고 외양간 고쳐보자.이 글은 ‘프로그래머스 알고리즘 고득점 킷 - 이분 탐색 - 입국 심사’ 문제를 기준으로 작성하겠다. 글을 읽기전에 알고리즘을 어느정도 공부했다면, 해당 문제를 풀이를 고민해보고 글을 읽으면 도움이 될 듯 하다.https://school.programmers.co.kr/learn/courses/30/lessons/43238 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지..
퀴즈 객체 양방향 매핑 없애기
·
프로젝트/COTATO.KR
현재 퀴즈 ←→ 선지 , 퀴즈 ←→ 주관식 정답에선 양방향 매핑이 되고 있다. MultipleQuiz.java: Choice를 List로 매핑하고 있다. @Entity @DynamicInsert @NoArgsConstructor(access = AccessLevel.PROTECTED) @DiscriminatorValue(value = "MultipleQuiz") @Getter public class MultipleQuiz extends Quiz { @OneToMany(mappedBy = "multipleQuiz", cascade = CascadeType.ALL) private List choices = new ArrayList(); @Builder public MultipleQuiz(int number,..
여러 객체를 삭제할 때 쿼리 줄이기
·
프로젝트/COTATO.KR
현재 문제 업로드를 할 때 임시저장 기능 구현을 아래와 같이 하고 있는데, 임시저장과 최종 업로드 하는 기능을 같은 API로 사용하고 있다.사용자가 저장하기 버튼을 누르면 아래와 같은 작업이 수행된다.현재 해당 교육에 업로드된 모든 퀴즈를 삭제한다.요청 온 퀴즈를 다시 업로드한다.문제 상황현재 로직@Transactionalpublic void createQuizzes(Long educationId, CreateQuizzesRequest request) { Education findEducation = findEducationById(educationId); checkQuizBefore(findEducation); validateDuplicateNumber(request); q..
MethodArgumentNotValidException 처리하기
·
프로젝트/COTATO.KR
클라이언트가 RequestBody에 Request DTO에 값을 넣어보낼때 이 값을 @Valid 어노테이션을 사용해서 검사한다. 들어와야하는 값이 들어오는지에 따라 다음 3가지 어노테이션을 주로 써서 검사를 한다. @NotNull : 요청된 값이 null이면 거절, “” 또는 “ “는 허용 @NotEmpty : 요청된 값이 null 또는 “”이면 거절, “ “는 허용 @NotBlank : 요청된 값이 null, “”, “ “이면 거절 이 외에도 @Min , @Max, @Email 등을 통해 길이나 형식 등을 DTO를 검증할 수 있다. 현재 서버의 API에서 발생하는 에러는 DTO Validation에서 발생하는 에러와, Controller 이후에서 발생하는 에러, Filter에서 발생하는(JWT 검증 및..
Controller 리팩토링
·
프로젝트/COTATO.KR
SpringBoot를 활용해 Rest API를 짤 때 Controller에서 ResponseEntity를 사용해 적절한 데이터를 반환한다. 기존 프로젝트를 진행할 때 나는 아래와 같은 방식으로 진행했다. 반환형 → 와일드 카드 사용 개발 초기 반환할 값을 설계하는 과정에서 와일드 카드를 하나씩 수정하는 것이 불편하다고 생각했음 body와 서비스 메서드 분리 (인라인화 하지 않음)List 를 한줄 써서 반환할 타입을 명시하고, activeMembers 를 body에 넣어주는 방식을 사용함. 성공한 응답 코드 OK로 통일세션 추가 요청 → 200OK, 성공했지만 반환할 값 없음 → 200OK 요청이 성공했을때 200번대의 HttpStatus코드를 구분하지 않고 200으로 통일해서 사용함. @GetMappin..
ErrorResponse로 전달할 필드에 대한 고민
·
프로젝트/COTATO.KR
프로젝트를 본격적으로 운영하며 예외처리에 대한 고민이 되기 시작한다. 예외가 발생하면 ErrorResponse를 통해 클라이언트가 해당 요청에서 무엇이 잘못되었는지를 알려줘야하고 또한 서버에도 적절한 로그를 남겨 어떤 문제가 발생했는지를 기록해야한다. 즉, 예외가 발생했을때 적절한 처리를 통해 2가지 목적을 달성해야한다. 클라이언트에 발생한 정보를 정확하게 전달해서 클라이언트가 적절한 예외처리를 할 수 있게 하자. 서버에 로그를 남겨 어디서, 왜 에러가 발생했는지를 기록해야한다. 이 글에선 비즈니스 로직 내부에서 발생한 에러에 대한 ErrorResponse에 들어갈 필드가 어떤 역할을 해야하는지를 고민하고 글을 정리할 계획이다. 기존 반환 값 현재 전달하고 있는 ErrorResponse는 다음과 같다. ..
어떤 개발자가 될 것인가
·
글을 써봐요/인사이트
요즘 자소서를 많이 쓴다. 흔히 생각하는 대기업류 자소서에는 항상 ‘입사 후 펼치고 싶은 꿈은?’, ‘우리 회사에 지원한 이유는?’ 이런 질문이 존재한다. 정말 흔한 자소서 질문이지만 매번 대답하기 어렵다. 사실 지독히 현실적으로 생각하면 지원동기란 ‘나는 개발자가 되고싶고 이곳에선 개발을 할 수 있으니까’인데 왜 이 회사여야하는가?가 항상 자소서를 쓰기 어렵게 만드는 것 같다. 그렇다면, 지원하는 회사는 제각각이니 회사를 선택하는 이유는 둘째치고 나는 왜 개발자가 되고 싶은지가 명확할까? 이런 의문이 들었다. https://youthing.tistory.com/89 (왕감자)개발자는 어떻게 나아가야 할까 한때 개발자라는 직업의 붐. 꽤 높은 초봉과 비전공자까지 끌여들이는 인력 부족으로 개발자의 인기는 ..
IT연합동아리 코테이토 교육팀 활동 회고록
·
활동/cotato
지난 2월 16일부로 공식적으로 코테이토 8기 교육팀 활동이 종료되었다. 7기부터 시작해서 8기엔 교육팀장으로, 대학생활에서 가장 열심히 참여했던 활동 중 하나로 꼽을만큼 열정적으로 임했던 교육팀 활동 후기를 남겨보려한다. 교육팀이란? IT연합동아리 코테이토에서 진행하는 정규 세션에서 매주 'CS 또는 면접에서 나올만한 기술 주제'를 바탕으로 10 ~ 15분간 교육을 진행하고 이에 대한 퀴즈를 진행하는 팀이다. 따라서, 매주 주제와 발표자를 선정하고 세션 전 팀원간의 회의를 통해 문제 제작 및 검증, 발표자료 피드백을 진행한다. 교육팀에 들어간 이유 처음 교육팀에 들어간 이유는 '발표능력을 기르자'였다. 정규세션은 매번 20 ~ 30명의 사람들이 참석을 하고 CS교육은 매번 진행되기에 이 사람들 앞에서 ..
DB인덱스
·
CS/교육팀
이번 교육 주제는 DB인덱스로 정했다. 교육팀 하면서 꼭 한 번은 다루고 싶던 주제이기도 했고 8기의 후반부라 부원들도 살짝 난이도 있는 주제를 정해도 이해가 쉽지 않을까 싶어서 해당 주제를 선택했다. 사례 우선, 단적인 상황에 대한 예시를 먼저 보자. 8기 코테이토 카페, CS교육 자료들이 업로드 되어있다. 이 많은 자료 중에 특정 단어, SOP에 대한 개념을 배웠던 것 같은데 기억이 나지 않아 해당 자료가 어디 있었지? 하며 찾아보는 중이다. SOP라는 단어가 어디에 위치하는지 아무 정보도 없다면 어떻게 탐색해야할까? 시작부터 끝까지 순차적으로 탐색하며 존재하는지, 아닌지를 찾아야한다. 하지만, 아래와 같이 용어와 용어의 위치에 대한 정보를 나타내는 표가 있다면 어떨까? 용어가 사전순으로 정렬되어있으..
유쓰응
글쓰는 개발자 Youth