우아한테크코스 6기 백엔드 활동 기록입니다 😊 주요 기술 스택은 Java 17, Springboot 3, MySQL(및 H2)입니다. 교육 과정 외에도 추가로 관심 있는 주제를 탐구하며 블로그를 운영해왔습니다.
2024.02.13 ~ 2024.04.05
- Java 라이브러리 기능의 목적과 객체 지향 설계를 학습하고 실제 코드에 적용하는 사이클에 집중한다.
- 단순히 사용법을 익히는 것을 넘어, 동작 원리와 사용 목적을 명확히 이해하고 이를 응용하고 판단하는 능력을 기른다.
- 읽기 좋은 코드를 고민하고 단위 테스트와 리팩토링을 반복하며 신뢰도 있는 코드를 작성한다.
- 도메인 모델별로 책임을 고민하며 도서 이펙티브 자바와 함께 OOP를 공부했습니다.
- 신뢰도 높은 도메인 모델 객체를 만드며 도메인 설계 경험을 쌓았습니다.
- 생성자 주입, 조합을 사용해 의존성 최소화를 목표로 도메인 객체를 설계하고 Value Object와 불변 객체를 학습하고 미션에 도입했습니다.
- MVC 패턴의 컨트롤러 계층에서 체스 게임의 상태에 따라 게임을 전개하도록 상태 패턴을 도입했습니다.
- 함수형 프로그래밍을 학습하고 Java의 함수형 프로그래밍 관련 기능을 활용해 의도가 명확히 전달되는 코드를 작성하고자 했습니다.
- 제네릭, 함수형 인터페이스를 활용해 MySQL Connection과 SQL을 관리했습니다.
| 제목 | 태그 |
|---|---|
| [JAVA] 메서드 간 공통 로직을 함수형 인터페이스를 사용해서 분리하자 | 람다식 함수형 인터페이스 제네릭 |
| [JAVA] 불변 객체 | 불변 객체 |
| [JAVA] static object는 GC의 대상이 아니다? | JVM Heap Memory |
| [JAVA] 자바는 어떤 정렬 알고리즘을 사용할까? | Sorting Algorithm |
| [JAVA] Thread와 Thread Scheduling | Thread Thread Scheduling |
| [회고] 우테코 백엔드 6기 Level 1 🎉 | 회고 |
[10분 테코톡] 미아의 Java Collection Framework
2024.04.16 ~ 2024.06.14
- 웹 애플리케이션을 개발하며 새로운 기술을 익힐 수 있는 나만의 학습 방법을 찾는다.
- 레거시 코드를 리팩토링하고 새 기능을 도입하는 경험을 쌓으며 하나의 애플리케이션을 완성한다.
(이전 미션의 코드를 가져와 다음 미션을 진행하는 방식에서 모든 미션에서 페어와 협의 끝에 제 코드가 선택되었습니다.)
- 프로그램의 모든 계층에 대한 슬라이싱 테스트와 E2E 테스트를 하며 Spring Web MVC를 학습했습니다.
- 서비스 정책이 구체화되면서 유효성 검증의 위치과 예외 처리에 집중했습니다.
- 요구사항 외에도 예약 도메인에서 트랜잭션 개념이 중요하다고 판단하여 스프링의 트랜잭션을 학습하고 코드에 적용했습니다.
- 프로그램에 JPA 도입하면서 id 채번 전략, global fetch 전략을 학습하고 코드에 적용했습니다.
- 효율적인 쿼리를 통해 JPA 영속성 컨텍스트의 캐시와 데이터베이스 리소스를 절약하고자 했습니다.
- 자체적으로 MySQL을 미션에 도입해서 예약 생성 API를 동시성을 고려하여 구현했습니다.
- PG사의 API에 결제 요청, 결제 내역 저장, 방탈출 예약 생성을 하나의 논리적 트랜잭션으로 구현했습니다.
- 이 때 TransactionalEventListener를 활용해서 롤백 처리 로직과 기존 로직을 분리하고 예약 도메인과 결제 도메인의 의존도를 낮추었습니다.
- 또한 비동기 메소드로 외부 API를 호출하여 외부 API가 방탈출 어플리케이션의 데이터베이스 connection을 점유하지 않도록 했습니다.
| 제목 | 태그 |
|---|---|
| [Springboot] Spring Web MVC와 Web layer 테스트 | Spring MVC org.springframework.test |
| [Springboot] @DirtiesContext는 H2 DB를 초기화해줄까? | H2, org.springframework.test |
| [Springboot] 유효성 검증과 예외 처리 | ExceptionHandler Validation |
| [Database] MySQL InnoDB의 Read-Only Transaction 최적화 | MySQL Transaction |
| [Springboot] JDBC와 함께 @Transactional 알고 써보기 | JDBC Transaction |
| [Springboot] Json 문자열을 Enum 값으로 변환/검증하기 | DTO Enum Validation |
| [트러블슈팅] 예약 생성 API에서 동시성 고려하기 | Concurrency Lock MySQL JPA |
| [트러블슈팅] 이벤트와 비동기 메소드로 외부 api 호출 롤백하기 (그리고 테스트하기) | Spring Application Event Transaction |