[우아한테크코스 6기 백엔드] 테크니컬 라이팅 - 연관관계에서 자식 객체들을 한 번에 삭제하는 방법들
·
우아한테크코스 6기 백엔드
연관관계에서 자식 객체들을 한 번에 삭제하는 방법들들어가면서안녕하세요. 우아한테크코스 6기 백엔드 구름 ⛅️ 입니다. 팀 프로젝트로 데벨업이라는 서비스를 개발하고 있어요. 데벨업은 개발 취준생들이 제공되는 문제를 풀고, 풀이를 공유하며 댓글로 소통할 수 있는 서비스입니다. 저희 서비스에서 풀이를 삭제하면 댓글들도 함께 삭제 처리해요.@OneToMany 연관관계에서 CascadeType.REMOVE와 orphanRemoval=true를 이용해 풀이가 삭제되면 댓글들도 함께 삭제되도록 구현했어요. 하지만 댓글들이 한 번에 삭제되지 않고, 하나씩 삭제되는 문제점이 있었는데요. 이 경우 댓글이 많아지면 삭제 시간이 오래 걸리고, 성능에 영향을 줄 수 있어요. 이 문제를 해결하기 위해 연관관계에서 자식 객체들을 ..
[우아한테크코스 6기 백엔드] 레벨3 글쓰기 - 함께 걷는 길
·
우아한테크코스 6기 백엔드
함께 걷는 길들어가며프로젝트에서 성공적인 결과를 내기 위해 우리는 때로 무조건적인 '네'를 말하게 된다. 이는 갈등을 피하고 팀의 분위기를 좋게 유지하려는 본능적인 반응일 수 있지만, 실제로는 팀의 신뢰와 프로젝트의 성공에 해를 끼칠 수 있다. 『소프트웨어 장인』이라는 책을 읽고 무조건적인 '네'보다 '아니오'라고 말할 수 있는 용기를 가지는 것이 중요하다는 생각이 들었다. '아니오'라고 말하는 것이 협업에서 중요한 이유와 이를 통해 더 나은 결과를 이끌어내는 방법에 대해 알아보자.'네'라는 것에 대한 두 가지 의미이 글에서 '네'라는 것에는 두 가지 의미가 있다. 내가 할 수 없는 일에 대해 무조건 '네'라고 대답하는 것과, 다른 사람의 의견에 무조건 '네'라고 대답하는 것이다. 먼저, 내가 할 수 없..
[우아한테크코스 6기 백엔드] 레벨2 글쓰기 - 나만의 길을 걷는다
·
우아한테크코스 6기 백엔드
나만의 길을 걷는다.들어가며빙글 빙글~ 두 눈이 열심히 움직인다. 나는 무엇을 보고 있는 것일까?나는 주변에 관심이 많다. 아닌 척하지만, 나는 주변에 관심이 정말~ 많다.언제부터였을까? 다른 사람들과 비교하며 살아가는 것이 당연하다고 생각했던 것 같다.그래서 다른 사람들이 무엇을 하고 있는지, 어떤 생활을 하고 있는지, 어떤 생각을 하고 있는지 항상 관심이 있었다.그리고 그것들을 비교하며 나의 삶을 살아가고 있었다.비교의 덫에서 벗어나다.레벨1과 같이 단순히 자바 언어로만 하는 프로그래밍은 생각보다 흔한 일이 아니기 때문에 남들과 크게 비교할 만한 일이 없었다.하지만 레벨2로 넘어오면서 큰 파도가 밀려왔다. 파도 하나를 넘어도 또 다른 파도들이 밀려왔다.스프링이라는 파도, 인증이라는 파도, 데이터베이스..
[우아한테크코스 6기 백엔드] 레벨1 글쓰기 - 천천히 가볼까?
·
우아한테크코스 6기 백엔드
천천히 가볼까?들어가며나는 항상 불안한 마음을 안고 살아왔다.성과를 내고 싶고, 인정 받고 싶은 욕망이 항상 내 마음을 가득 채웠다.이러한 욕망은 나를 더욱 발전시키는 원동력이었다.그러나 이 욕구가 때로는 무리한 압박으로 이어지면서 번아웃의 그늘을 내게 드리웠다.반복나는 우아한테크코스 백엔드에 들어오기 전에 오랫동안 프론트엔드 공부를 해왔다.오래 공부한 수준이 아니라 최근 삶의 모든 것이었다.작년 여름이 끝나기 전까지만 해도 우아한테크코스 6기 프론트엔드를 지원할 생각이었다.심지어 우아한테크코스 지원 자소서에는 프론트엔드 개발 관련 내용밖에 없다.하지만 인공지능의 발전으로 인해 프론트엔드 개발자의 수요가 많이 줄어들 것이라는 생각이 내 머리 속을 맴돌았다.어쩔 수 없이 미래를 위해 백엔드 개발자로 전향하..
[우아한테크코스 6기 백엔드] 방탈출 결제 / 배포 회고
·
우아한테크코스 6기 백엔드
⛅️ 들어가는 말우아한테크코스 레벨2의 네번째 미션은 방탈출 결제 / 배포이다.1~2단계는 외부 API(토스 페이먼츠 결제) 연동하는 것이고,3단계는 AWS에 배포하는 것이고,4단계는 문서화를 하는 것이다.⛅️ 미션에 대한 부분⭐️ 외부 요청스프링에서 외부 API 연동은 처음해봤다.일반적으로 RestTemplate, RestClient를 사용하는 것 같았고, 나는 구조가 깔끔한 RestClient를 사용해서 구현했다.단순히 외부 요청만 하면 될 거라 생각했는데 생각보다 할 일이 많았다.Connection TimeoutRead Timeout전체 응답 중 어떤 응답을 사용할지외부 요청에 대한 에러를 어떻게 내 클라이언트에게 전달할지실패 시 어떻게 처리할지결제에 대한 부분은 정합성이 중요하기 때문에 요청과 응..
[우아한테크코스 6기 백엔드] 방탈출 사용자 예약 회고
·
우아한테크코스 6기 백엔드
들어가는 말우아한테크코스 레벨2의 두번째 미션은 방탈출 사용자 예약이다. 1~3단계는 예외 처리와 복잡한 쿼리에 대한 내용이고,4~6단계는 스프링을 사용한 인증에 관한 내용이었다. 미션을 진행하면서도 처음해보는 사람들이 잘 따라올 수 있을까 걱정했는데, 역시 PR 개수나 Merge 개수를 보니 많이 어려워한 것 같다.미션에 대해서1-3단계1-3단계에서는 페어프로그래밍이라 어려운 내용은 없게 했던 것 같다.주요한 내용은 @ControllerAdvice와 @ExceptionHandler를 사용하는 것이었다. 미션을 하면서 생각했던 것이 domain에서 illegalArgumentException같은 표준 에러를 넘겨주거나 Repository interface에서 default 메서드를 만들어서 NoSuchE..
[우아한테크코스 6기 백엔드] 방탈출 예약 관리 회고
·
우아한테크코스 6기 백엔드
들어가는 말우아한테크코스 레벨2의 첫번째 미션은 방탈출 예약 관리이다.이번 백엔드 6기에서는 이전과 달리 레벨2 미션 주제가 방탈출로 묶여있다.레벨의 각 미션에서는 이전에 했던 코드를 재사용하는 것 같다.미션에 대해서레벨2는 스프링 프레임워크에 대해서 소프트 랜딩을 하는 과정이라고 한다.첫번째 미션만 보긴 했지만 문제들이 레벨1에 비해 생각할 것들이 없었다.대부분이 예제로부터 가져다 쓰면 풀리는 문제들이었다. 1-3단계는 스프링과 인메모리 DB(List)를 사용해보는 것이었다.단순하게 스프링으로 CRUD를 하고, 요청과 응답을 어떻게 하는지 생각해보는 시간이었던 것 같다. 4-9단계는 H2 DB를 연결하고, 복잡한 스키마를 작성해 보는 것을 의도한 것 같다. 그리고 그 과정에서 계층화를 왜 시키는지에 대..
[우아한테크코스 6기 백엔드] 체스 회고
·
우아한테크코스 6기 백엔드
들어가는 말우아한테크코스 레벨1의 네번째 미션은 체스 미션이다. 이번 미션의 목표는 OOP와 DB다.체스 미션은 4개의 step으로 이루어져 있다.step 1, 2, 3에서는 체스를 구현하고, step 4에서는 체스 미션에 DB를 적용하는 식으로 단계가 구성되어 있다.디자인 패턴체스 게임에서 중점적으로 볼 부분은 명령어, 기물 추상화, 게임 진행 상태라고 생각한다. 이 부분은 각각 커맨드 패턴, 템플릿 메서드 패턴 또는 상속, 상태 패턴이라는 디자인 패턴들로 구현할 수 있다.커맨드 패턴start, end, move $1 $2, status같은 명령어들을 enum으로 만들고, 인자 개수를 검증할 수 있고, 각각 명령어마다 액션들을 Map으로 만들어서 처리해줬다.추상 클래스 상속체스에서는 폰, 퀸, 킹, 룩..