카테고리
Back-end
9개의 글
-
[백엔드 입문 #9] 레거시 MyBatis 코드로 본 SQL 매핑과 SQL 인젝션
SQL을 XML에 직접 쓰는 레거시 MyBatis 코드를 따라가며 정리했다. Mapper 인터페이스와 XML의 연결, 동적 SQL, #{}와 ${}의 차이와 SQL 인젝션, 그리고 FOUND_ROWS()에 같은 DB 연결이 필요한 이유.

-
[백엔드 입문 #8] JUnit과 Mockito로 도메인, UseCase, 통합 테스트 작성하기
Jest에 익숙한 프론트 개발자가 JUnit과 Mockito를 따라가며 정리한 백엔드 테스트. 도메인, UseCase, 통합 테스트의 세 층과 각각이 잡는 문제, 그리고 설계가 테스트를 쉽게 만드는 이유.

-
[백엔드 입문 #7] Spring 예외가 프론트 에러 응답이 되는 과정
프론트에서 매일 꺼내 쓰던 e.response.data.message가 서버 어디에서 만들어지는지 따라갔다. 예외 전파, 전역 예외 처리기, message/errorCode/logMessage의 역할, 예외 종류와 HTTP 상태 코드, warn과 error의 구분까지.

-
[백엔드 입문 #6] 출고 상태 규칙을 도메인 모델에 두는 이유와 멱등성
"이 상태에서는 이걸 하면 안 된다" 같은 규칙을 코드 어디에 둘까? WMS 출고를 따라가며 빈약한/풍부한 도메인 모델, 캡슐화, 같은 요청이 두 번 와도 버티는 멱등성, 전략 패턴을 정리했다.

-
[백엔드 입문 #5] @Transactional의 동작과 롤백 범위
거의 모든 UseCase 메서드 위에 붙어 있던 @Transactional을 정리했다. 트랜잭션이 하는 일, save 없이 저장되는 시점, 롤백되는 예외와 안 되는 예외, 그리고 트랜잭션이 되돌리지 못하는 외부 API 호출까지.

-
[백엔드 입문 #4] JPA Entity 매핑과 Repository 메서드 이름 규칙
지난 글에서 Spring이 객체를 대신 만들어 연결해 주는 의존성 주입(DI)을 정리했다. 이번에는 메서드 이름만 썼는데 SQL이 실행되는 이유, 그리고 Java 객체가 DB 테이블과 어떻게 연결되는지 JPA를 정리한다.

-
[백엔드 입문 #3] Spring 의존성 주입과 Bean 싱글톤
지난 글에서 Java 문법을 정리하면서 계속 마음에 걸리는 코드가 있었다. final 필드는 생성자에서 반드시 값을 넣어야 한다. 그런데 생성자도 없고, new DeleteFeatureFlag(...)를 부르는 곳도 없다. 그런데도 null이 아니다. 이 두 가지를 각각 다른…

-
[백엔드 입문 #2] TypeScript와 비교하며 읽은 Java 문법
지난 글에서 API 요청 하나가 백엔드에서 처리되는 흐름을 따라갔다. 이번에는 그 코드를 읽으며 헷갈렸던 Java 문법을 TypeScript와 비교하며 정리한다. 새 예제는 가져오지 않고, 지난번에 본 피처 플래그 코드를 문법 관점에서 다시 읽었다. 가장 낯설었던 점:…

-
[백엔드 입문 #1] API 요청 하나가 백엔드에서 처리되는 과정
프론트엔드 개발자로 일하면서 백엔드는 늘 "API 문서 너머의 무언가"였다. axios.post 한 줄을 보내면 응답이 돌아오는데, 그 사이에 무슨 일이 일어나는지는 잘 몰랐다. 그래서 회사에서 쓰는 WMS(창고관리시스템) 백엔드 코드(Java 17 + Spring Boot)를…
