무한 스크롤 지난 여름, 우아한 테크코스에서 Step 2 과정으로 3주 동안 미니 프로젝트를 진행했습니다. 저희 팀의 주제는 인스타그램이었는데요. Spring Boot와 JPA를 기반으로 만들어보고 싶었던 기능들을 마음껏 구현해볼 수 있었던 재미있는 프로젝트였습니다. 시간이 좀 지났지만 JPA의 페이지네이션 기능을 사용해서 만들었던 무한 스크롤을 주제로 간단하게 포스팅을 해보겠습니다. 인스타그램에서 페이지네이션? 인스타그램 서비스의 메인 페이지에는 내가 팔로우하고 있는 사람들의 게시물들이 시간 순서대로 보입니다. 그런 페이지를 만들어 보려고 생각해보니, 인스타그램이라는 서비스에서 [1] [2] [3] [4] ... 와 같이 일반적인 페이지네이션을 구현한다는 것이 굉장히 어색하다는 사실을 인지하지 못하고 ..
트랜잭션 적용으로 알아보는 서비스 추상화 5장에서는 트랜잭션을 적용해보면서 스프링이 어떻게 성격이 비슷한 여러 종류의 기술을 추상화하고 이를 일관된 방법으로 사용할 수 있도록 지원하는지를 살펴볼 것이다. 모 아니면 도 서비스에서 필요한 사용자의 레벨 관리 기능에 대한 요구사항을 추가로 구현하고, 테스트도 잘 만들어서 검증도 마쳤다. 이 때 다음과 같은 질문이 나왔다. 정기 사용자 레벨 관리 작업을 수행하는 도중에 네트워크가 끊기거나 서버에 장애가 생겨서 작업을 완료할 수 없다면, 그때까지 변경된 사용자의 레벨은 그대로 둘까요? 아니면 모두 초기 상태로 되돌려 놓아야 할까요? 열띤 토론 끝에 사용자 레벨 조정 작업은 중간에 문제가 발생해서 작업이 중단된다면 그때까지 진행된 변경 작업도 모두 취소시키도록 결..
예외 처리 자바 개발자가 가장 신경 쓰기 귀찮아하는 것 중의 하나가 바로 예외처리다. 정상적인 결과와 흐름을 보여주는 코드를 만들기도 버거운데 예외상황까지 처리해야 한다는 사실이 부담스러울 수도 있다. 이 장에서는 예외를 처리하는 Best Practice를 살펴본다. 초난감 예외처리 먼저 개발자들의 코드에서 종종 발견되는 초난감 예외처리의 경우들을 살펴보자. 예외 블랙홀 try { // Do something } catch (SQLException e) { } 예외를 잡고는 아무것도 하지 않는 경우다. 예외 발생을 무시해버리고 정상적인 상황인 것처럼 다음 라인으로 넘어가겠다는 분명한 의도가 있는 게 아니라면 연습 중에도 절대 만들어서는 안 되는 코드다. 왜냐하면 프로그램 실행 중에 어디선가 오류가 있어서..
IoC? DI? Spring 프레임워크를 직접적으로 사용하지 않더라도, 개발을 하다보면 IoC(Inversion of Control), 혹은 DI(Dependency Injection)라는 용어에 대해서 듣게 되는 경우가 많습니다. Spring에서만 사용하는 개념들이 아니기 때문인데요. 그때마다 IoC나 DI가 궁금해서 용어에 대한 정의를 보며 공부를 해도 이 개념들이 정확하게 무엇인지, 왜 필요한지에 대해 처음에는 크게 와닿지 않는 것이 사실입니다. 이번 포스팅에서는 간단한 자바 예제를 통해 Spring의 IoC와 DI에 대해서 이해해보는 시간을 가져보도록 하겠습니다. 커피 한 잔 카페에서 손님이 커피를 커피를 전문적으로 취급하는 어떤 카페가 있습니다. 이 곳 카페의 바리스타는 본인이 만드는 커피에 높..
템플릿 객체지향 설계의 핵심 원칙인 개방 폐쇄 원칙(OCP)를 생각해보자. 이 원칙은 코드에서 어떤 부분은 변경을 통해 그 기능이 다양해지고 확장하려는 성질이 있고, 어떤 부분은 고정되어 있고 변하지 않으려는 성질이 있음을 말해준다. 템플릿이란 이렇게 바뀌는 성질이 다른 코드 중에서 변경이 거의 일어나지 않으며 일정한 패턴으로 유지되는 특성을 가진 부분을 자유롭게 변경되는 성질을 가진 부분으로부터 독립시켜서 효과적으로 활용할 수 있도록 하는 방법이다. 예외처리 기능을 갖춘 DAO DB Connection이라는 제한적인 리소스를 공유해 사용하는 서버에서 동작하는 JDBC 코드에는 반드시 지켜야 할 원칙이 있다. 바로 예외 처리다. 정상적인 JDBC 코드의 흐름을 따르지 않고 중간에 어떤 이유로든 예외가 발..