2.24 ~ 2.28
새해 복 많이 받으라고 인사를 나누던 게 엊그제 같은데 벌써 2월이 끝났다....
시간이 진짜 빨리 간다고 느끼면서 한편으로는 최종 프로젝트가 다가온다는 사실이 조금 기대되는 것 같다.
14주까지 진행하면서 개발자로서 많이 성장한 것 같다. 리눅스, 네트워크 등 기초적인 개념부터 뷰에 대해서도 배우고, 스프링 수업을 들으면서 스프링 부트로 REST API를 구현해보고, 팀원들과 프로젝트 성능 개선에 대해 토론하면서 조금은 개발자다워졌다고 스스로 느끼고 있다!
앞으로 다가올 최종 프로젝트에서도 지금까지 공부한 것들을 잘 활용해 완성도 높은 프로젝트를 구현해보고 싶다...!
근데 최종 팀 언제 나와요....? 넘 궁금 🥺
이번 주에 배운 내용
이번 주에는 드디어 Spring 수업이 끝났다!
월요일에는 JPQL을 활용해서 n+1 문제를 해결하는 법과 엔티티 간 연관관계를 고려해서 쿼리를 최적화하는 방법을 배웠다.
조회 기능 하나를 실행하는 데 생각보다 많은 select 문이 실행되고 있었고, 이로 인해서 성능 저하가 발생할 수 있다는 걸 깨달았다. JPQL로 엔티티 객체를 대상으로 쿼리를 작성해서 Fetch Join으로 select 문이 한 번만 실행될 수 있게 해서 n+1 문제를 해결했다.
엔티티 간의 연관관계를 고려해서 다대일, 일대다 관계일 때 어떤 방식으로 최적화해야 하는지를 배웠고, 페이징 처리 유무에 따라서도 배치 사이즈 등 최적화하는 방식이 달라질 수 있는 걸 배웠다.
그리고 반정규화에 대해서도 배웠다. 엔티티에 변수를 하나 만들어서 조인할 필요 없이 변수를 가져오게 구현하는 방식을 배웠다.
예를 들어 게시글 좋아요의 개수를 게시글 목록 조회할 때 보여주려고 하는데, 만약 좋아요 엔티티와 연관관계를 맺고 있으면 좋아요의 개수를 체크하기 위해 likes 테이블과 조인을 해야 한다. 이런 경우, 하나의 테이블을 더 가져와야 하기 때문에 부하가 발생하고, 이를 해결하기 위해 좋아요의 개수 변수를 만들어서 해결했다. 좋아요를 누르는 요청이 왔을 때, 좋아요 테이블에 데이터를 저장하고, 좋아요의 개수 변수를 업데이트 시켜주면 된다.
하지만 이렇게 해결했을 경우 동시성 문제(여러 사람이 동시에 좋아요를 눌렀을 경우)가 발생할 수 있기 때문에 동시성 문제에 대해서는 화요일에 배웠다.
화요일에는 위와 같은 동시성 문제를 해결하는 방법에 대해서 배웠다. 동시성 문제를 해결하는 방법에는 synchronized를 사용해 하나의 쓰레드만 실행되게 구현하는 방법과 낙관적 락, 비관적 락이 있다. 실습으로 진행하면서 배웠기 때문에 더 이해가 잘 갔던 것 같다. 마지막 방법으로는 Redis와 같은 캐시 서버를 사용하는 방법이 있는데, Redis는 커리큘럼에 없기 때문에 배우지 못했다.... 채용 공고에서 많이 봤던 기술이기 때문에 개인적으로 꼭 공부하고 싶다.
그리고 검색 필터와 같은 곳에서 사용하는 동적 쿼리(QueryDSL)에 대해서 배웠다. 쿼리의 where 절에 해당하는 것인데, QueryDSL을 활용해서 복잡한 동적 쿼리를 편리하게 작성하는 실습을 진행했다.
그리고 테스트 코드에 대해서도 배웠다. 실무에서는 테스트 코드에 대한 호불호가 많이 갈린다고 한다...
테스트 코드를 작성하는 패턴과 좋은 테스트 코드 속성, 단위 테스트/통합 테스트에 대해서 배웠다.
수요일에는 최종 팀을 결정하는 시험을 진행했다! 지금까지 배운 것들 총집합이라고 볼 수 있다.
IP 주소를 설정하고 프론트 서버, 백엔드 서버를 각각 개발해서 리눅스 환경에 배포하고 도메인 설정까지 하는 시험이었다. 다행히 시간 안에 다 만들어서 제출할 수 있었다! 이전에 블로그를 작성했던 걸 많이 참고해서 잘 마무리할 수 있었던 것 같다.
실제로 내 블로그 조회수가 이날 갑자기 점프했다 ㅋㅋㅋ ㅋ 다들 많이 참고하고 있는 것 같아서 뿌듯하면서도 한편으로는 블로그 정리를 열심히, 잘 해야겠다는 생각이 들었다.
드디어 스프링이 끝나고, 목요일은 MSA에 대해서 배웠다.
우아한 형제들의 배민 마이크로서비스 여행기 유튜브 영상을 보면서 수업을 진행했는데,
시 배민 기존의 단일 서비스의 문제와 이를 해결하기 위한 배민 개발자들의 고민들을 개발자에게 직접 들을 수 있었고, 아키텍처 설계부터 MSA로 전환 과정을 들을 수 있었다. 현업에서의 MSA 전환 과정을 직접 들을 수 있어 흥미로웠고, MSA에 대해서 더 이해가 잘 갔던 수업이었다.
이벤트 스토밍에 대해서 배웠고, Zero Payload 방식을 사용해 서로 다른 모듈 서버에서 idx 값만 주고 받는 실습을 진행했다. OpenFeign을 사용해서 API를 호출해서 데이터를 주고 받는 방식도 배웠다.
그리고 헥사고날 아키텍처에 대해서 배웠다. 사실 수업은 잘 들었지만 이해가 잘 가지 않아서... 블로그를 정리하면서 자료들 좀 찾아보고 복습해야겠다.
금요일에는 MSA에서 CQRS를 사용하는 방법에 대해 배웠다.
서로 다른 모듈에서 카프카로 이벤트를 주고받아 Command 서버에서 게시글을 생성함과 동시에 Query 서버에서 event로 받아 게시글 데이터를 Query 서버 DB에 저장하고, Query 서버에서 게시글을 조회할 때 Query 서버의 DB에서 조회하는 실습을 진행했다.
그리고 Event Sourcing과 Eventual Consistency 개념에 대해서도 배웠다. 만약 성능이 부족해서 Query 서버를 증설해야 할 때 서버마다 DB를 따로 둔다면 DB를 동기화시켜야 한다. DB에 아무것도 없더라도 카프카에 통신 메시지가 쌓여있으니까 그 메시지를 전부 가져와서 동기화하는 설정을 추가하는 방법을 배웠다. 각각 DB를 사용할 때, 카프카 consumer를 1대만 사용할 때, 각각의 consumer 서버를 사용할 경우 각각 다른 그룹 ID를 사용할 때 또는 같은 그룹 ID를 사용할 때 등등 이렇게 경우에 따라서의 특징과 단점들에 대해서 배웠다.
배웠던 내용들을 글로 나열하려니 좀 길어졌는데... 위의 내용들 모두 블로그에 포스팅할 예정이다.
스프링 심화 과정을 끝내고 MSA를 처음 배우는 만큼 제대로 복습해서 포스팅할 것이다.
KEEP
✅ 수업 열심히 듣기
수업을 열심히 듣는 건 당연한 일이지만.... 저번주에는 하루에 최소 30분은 졸았던 것 같다.
이번 주에는 수업 중에 졸았던 시간을 나름 줄였다!
수업 중에 거의 졸지 않고 수업을 들었고, 조금이라도 졸음이 온다 싶으면 바로 강의실 뒤에 나가서 일어서서 수업을 들었다.
✅ 운동하기
그리고 요즘 운동을 시작했다! 9 to 6를 매일 하고 심지어 거의 10시까지 남아서 공부를 하다 보니까 체력이 너무 부족한 걸 느꼈다.
헬스장을 등록해서 주에 최소 3일은 꼭 나가고 있다. 일주일에 한 두번은 아침 7시부터 운동하고 출근했다,, 피곤할까봐 걱정했는데 생각보다 정신이 맑아지는 느낌이라 최대한 아침에 나가려고 노력하고 있다. 대신 아침에 운동한 날은 집에 일찍 갔다. 8시 반, 9시쯤?
✅ 팀원들과 소통
우리 팀은 소통이 아주 잘 된다! 서로 모르는 부분에 대해서 질문도 막힘없이 하고, 의견을 잘 주고 받는다.
이번 주에는 이 API 요청은 어떤 기능의 컨트롤러에 있어야 하는지, n+1을 해결하기 위해 반정규화를 어떻게 사용해야 할지 등등 어떤 방식으로 구현해야 성능이 좋아질지를 고민하면서 대화를 나눴는데, 얘기가 끝나고 시간을 보니 벌써 한 시간이 지나있었다.
프로젝트 성능 개선에 대한 얘기로 이렇게 시간 가는 줄 모르고 신나게 대화했다는 게 좀 신기했고, 개발자로서 한층 성장한 느낌이 들어서 좋은 경험이었다고 생각한다.
✅ 주말 모각코
이번 주에는 동기들끼리 모각코를 진행했다. 토요일, 그리고 월요일이 휴일이었어서 이렇게 이틀 진행했다.
모각코를 진행하니까 확실히 혼자 공부할 때 몰랐던 부분들을 질문하면서 답을 찾을 수 있었고, 다들 집중하면서 공부하니까 나도 같이 열심히 집중하면서 공부하게 됐다. 혹시라도 디코 모각코 채널에 제가 있으면 망설임 없이 들어오십쇼.. 언제든 환영
PROBLEM
💥 MSA 특정 부분 이해 부족
MSA의 개념에 대해서는 배민 유튜브를 보고 어떤 방식인지는 이해했는데.... 중간에 헥사고날 아키텍처에 대해서 배웠는데 이 부분은 아직 이해하지 못했다.
💥 코딩테스트 준비 부족
요즘 수업을 따라가기 너무 바쁘고, 프로젝트까지 진행 중이라 알고리즘 문제를 풀 시간이 없었다...
개인적으로 정한 우선순위가 1 - 수업, 2 - 프로젝트, 그리고 코테 준비는 3위기 때문에... 우선순위인 수업과 프로젝트 개발에 집중하느라 알고리즘 문제를 많이 풀지 못했다. PCCP를 보기로 했었는데 큰일이다 😅
TRY
💡 밀린 블로그 마저 쓰기
이번 주에는 그래도 좀 많이 썼다고 느끼는데 아직 밀렸다. 최대한 밀린 부분이 없게 열심히 써보자...!!
💡 MSA 블로그 정리하면서 복습하기
MSA 부분이 이해가 부족하다고 생각돼서 블로그를 정리하면서 제대로 복습할 생각이다!
이해가 가지 않는다면 다른 블로그 찾아보기 + 지피티한테 이해가 가지 않는 부분들 끊임없이 물어보기
💡 시간 정해서 하루에 하나씩 알고리즘 문제 풀기
PCCP 시험이 얼마 남지 않았기 때문에... 이제는 문제를 풀면서 준비해야 한다.
매일 10시까지 남아서 공부하니까 9시까지는 수업 내용 복습 + 프로젝트 구현을 하고, 9시부터 PCCP 기출 문제를 하루 한 문제씩은 꼭 풀 예정이다.
'회고 > BEYOND SW 캠프' 카테고리의 다른 글
[BEYOND SW CAMP] 16주차 회고 (0) | 2025.03.17 |
---|---|
[BEYOND SW CAMP] 15주차 회고 (0) | 2025.03.12 |
[BEYOND SW CAMP] 13주차 회고 (2) | 2025.02.24 |
[BEYOND SW CAMP] 12주차 회고 (1) | 2025.02.17 |
[BEYOND SW CAMP] 11주차 회고 (0) | 2025.02.10 |