본문 바로가기

BackEnd/Spring22

[SpringDB1] 스프링과 문제 해결 - 예외 처리, 반복 공부 내용을 정리하고 앞으로의 학습에 이해를 돕기 위해 작성합니다. 앞선 포스트에서 자바 예외의 기본을 짚으면서, 체크 예외를 런타임 예외로 바꿔야 서비스 계층을 순수하게 지킬 수 있다는 것까지 정리했다. 이번 글에서는 그 원리를 실제 코드에 적용한다. 리포지토리가 던지는 SQLException 을 런타임 예외로 전환하고, 스프링이 제공하는 예외 추상화로 기술 종속을 끊은 뒤, 마지막으로 JdbcTemplate 으로 리포지토리에 남아있던 JDBC 반복까지 걷어낸다. 트랜잭션 편에서 미뤄둔 예외 누수와 JDBC 반복 문제를 여기서 마무리하는 셈이다. 결론부터 말하면, 예외를 전환할 때는 반드시 기존 예외를 포함하고, 서비스에서는 SQLException 대신 스프링이 제공하는 데이터 접근 예외를 쓰는 것이 .. 2026. 7. 30.
[SpringDB1] 자바 예외 이해 공부 내용을 정리하고 앞으로의 학습에 이해를 돕기 위해 작성합니다. 스프링이 제공하는 예외 추상화를 이해하려면 먼저 자바 예외의 기본을 알아야 한다. 예외 계층과 기본 규칙을 짚고, 체크 예외와 언체크 예외의 차이가 무엇인지, 그리고 실무에서 둘 중 무엇을 언제 써야 하는지까지 정리한다. 결론부터 말하면 기본은 언체크(런타임) 예외를 쓰고, 체크 예외는 비즈니스 로직상 반드시 처리해야 하는 예외에만 쓴다.예외 계층예외도 하나의 객체다. 모든 예외의 최상위 부모는 Object 이고, 그 아래 예외 전용 최상위인 Throwable 이 있다. 그리고 Throwable 아래가 크게 둘로 갈린다. Object │ .. 2026. 7. 19.
[SpringDB1] 스프링과 문제 해결 - 트랜잭션 공부 내용을 정리하고 앞으로의 학습에 이해를 돕기 위해 작성합니다.서비스 계층에는 원래 핵심 비즈니스 로직만 있어야 한다. 그런데 트랜잭션을 적용하는 순간 JDBC 기술이 서비스 계층으로 흘러 들어와 코드가 지저분해진다. 스프링은 이 문제를 트랜잭션 추상화, 트랜잭션 동기화, 트랜잭션 템플릿, 트랜잭션 AOP 순서로 하나씩 해결한다. 그 과정을 따라가면서, 최종적으로 서비스에 @Transactional 한 줄만 남기는 것이 이번 글의 목표다.애플리케이션 구조가장 단순하면서 많이 사용하는 구조는 역할에 따라 3가지 계층으로 나누는 것이다.[@Controller] ─→ [@Service] ─→ [@Repository] ─→ [ DB ] 프레젠테이션 서비스 데이터 접근 UI/웹/검증 .. 2026. 7. 9.
[SpringDB1] 트랜잭션 이해 공부 내용을 정리하고 앞으로의 학습에 이해를 돕기 위해 작성합니다. 데이터를 파일이 아닌 데이터베이스에 저장하는 가장 큰 이유 중 하나가 트랜잭션이다. 트랜잭션을 사용하면 여러 SQL을 하나의 작업처럼 묶어서, 모두 성공하면 반영하고 중간에 하나라도 실패하면 거래 전 상태로 되돌릴 수 있다.트랜잭션과 ACIDA의 5000원을 B에게 계좌이체한다고 하면 ① A 잔고 5000원 감소 ② B 잔고 5000원 증가, 두 작업이 하나처럼 동작해야 한다. 1번만 성공하고 2번에서 실패하면 A의 돈만 사라지는 심각한 문제가 생긴다. 모든 작업이 성공해서 DB에 반영하는 것을 커밋(commit), 하나라도 실패해서 거래 이전으로 되돌리는 것을 롤백(rollback) 이라 한다.트랜잭션은 ACID를 보장해야 한다.원자성.. 2026. 6. 26.
[SpringDB1] 커넥션 풀과 데이터소스 공부 내용을 정리하고 앞으로의 학습에 이해를 돕기 위해 작성합니다. 커넥션을 매번 만들 때의 부담데이터베이스 커넥션 하나를 새로 만드는 과정은 다음과 같다.① 앱이 DB 드라이버로 커넥션 조회② 드라이버가 DB와 TCP/IP 연결 (3-way handshake 등 네트워크 동작)③ ID/PW와 부가정보를 DB에 전달④ DB가 인증을 거쳐 내부에 DB 세션 생성⑤ DB가 커넥션 생성 완료 응답⑥ 드라이버가 커넥션 객체를 만들어 앱에 반환이 과정은 복잡하고 시간이 든다. 더 큰 문제는 SQL 실행 시간뿐 아니라 커넥션을 새로 만드는 시간이 매 요청마다 추가되어 응답 속도에 영향을 준다는 점이다. 데이터베이스마다 다르지만 MySQL 계열은 수 ms, 더 오래 걸리는 데이터베이스도 있다.커넥션 풀이 문제를 해결.. 2026. 6. 21.
[SpringDB1] JDBC 이해 공부 내용을 정리하고 앞으로의 학습에 이해를 돕기 위해 작성합니다.JDBC 등장 이유애플리케이션을 개발할 때 중요한 데이터는 대부분 데이터베이스에 보관한다. 애플리케이션 서버가 데이터베이스를 사용하는 과정은 보통 세 단계로 이뤄진다.커넥션 연결: 주로 TCP/IP를 사용해 커넥션을 연결한다.SQL 전달: 연결된 커넥션을 통해 DB가 이해할 수 있는 SQL을 전달한다.결과 응답: DB가 SQL을 수행하고 그 결과를 응답한다.문제는 이 세 단계의 구체적인 방법이 데이터베이스마다 모두 다르다는 점이다. 관계형 데이터베이스만 해도 수십 개가 있다. 여기서 두 가지 문제가 생긴다.데이터베이스를 다른 종류로 변경하면 애플리케이션 서버의 DB 사용 코드도 함께 변경해야 한다.개발자가 데이터베이스마다 커넥션 연결, S.. 2026. 6. 20.