앞서, 초난감 DAO 중에서 변경이 자주 일어나는 부분과 고정된 부분에 대해 효과적으로 활용하기 위한 리팩토링을 진행해보았다. 템플릿이란, 이렇게 서로 다른 부분에서 변경이 거의 일어나지 않는 부분을 자유롭게 변경되는 성질을 가진 부분으로 독립시켜 효과적으로 활용할 수 있게 하는 방법이다. UserDao 예외 처리 기존에 작성하였던 UserDao는 예외처리 구문이 빠져있다. JDBC 코드에서는 어떤 상황에도 정상적으로 리소스를 반환하도록 try/catch/finally 구문을 사용할 것을 권장한다. 기존에 작성하였던 deleteAll 함수를 보자. public void deleteAll() throws SQLException { Connection c = dataSource.getConnection();..
1장 '오브젝트와 의존관계'에서 확장되고 복잡해져가는 애플리케이션을 고려한 확장을 위해 IoC/DI와 같은 기술을 배우고, 실제로 만든 서비스에 적용해보는 실습을 하였다. 2장에서는 스프링에서 가장 중요한 가치 중 하나인 테스트에 대해 배워볼 것이다. 단위 테스트 (Unit Test) DB Connection을 진행하는 코드를 마음대로 변경하는 작업을 수행하면서, 커넥션이 잘 수행되는 지 확인하기 위해 테스트 코드를 사용할 수 있다. 아래는 사용자의 정보를 만들고, 조회하는 테스트 예제이다. public class UserDaoTest { public static void main(String[] args) throws ClassNotFoundException, SQLException { Applicat..
2023.09.13 - [DEV book/토비의 스프링 3.1] - [토비의 스프링 3.1] 1장 오브젝트와 의존관계 (1) - 전략 패턴을 이용한 DAO 클래스 리팩토링 [토비의 스프링 3.1] 1장 오브젝트와 의존관계 (1) - 전략 패턴을 이용한 DAO 클래스 리팩토링 스프링이란 ? Spring Container(스프링 컨테이너 = Application Context)를 기본 틀로 한다. 스프링은 표준 자바 엔터프라이즈 플랫폼에 기반을 두고 있다. 스프링 프레임워크에서 제공하는 프로그래밍 모 mingyum119.tistory.com 2023.09.13 - [DEV book/토비의 스프링 3.1] - [토비의 스프링 3.1] 1장 오브젝트와 의존관계 (2) - 제어의 역전 (IoC)과 Applicat..
2023.09.13 - [DEV book] - [토비의 스프링 3.1] 1장 오브젝트와 의존관계 (1) - 전략 패턴을 이용한 DAO 클래스 리팩토링 [토비의 스프링 3.1] 1장 오브젝트와 의존관계 (1) - 전략 패턴을 이용한 DAO 클래스 리팩토링 스프링이란 ? Spring Container(스프링 컨테이너 = Application Context)를 기본 틀로 한다. 스프링은 표준 자바 엔터프라이즈 플랫폼에 기반을 두고 있다. 스프링 프레임워크에서 제공하는 프로그래밍 모 mingyum119.tistory.com 이전 포스팅에서 DAO를 리팩토링하는 과정에서 다양한 디자인 패턴, 객체지향 설계 등을 고려해 최적의 DAO 클래스를 만들어보는 실습을 하였다. 이번 포스팅에서는, 여기에서 사용된 제어의 역..
스프링이란 ? Spring Container(스프링 컨테이너 = Application Context)를 기본 틀로 한다. 스프링은 표준 자바 엔터프라이즈 플랫폼에 기반을 두고 있다. 스프링 프레임워크에서 제공하는 프로그래밍 모델은 IoC/DI, 서비스 추상화, AOP가 있다. 왜 스프링을 사용하는가 ? 단순함 POJO(Plain Old Java Object) 프로그래밍으로 객체지향적인 개발 모델을 구현한다. POJO 프로그래밍이란, 컨벤션이나 프레임워크에 종속되지 않는 단순한 Java 오브젝트를 사용한 프로그래밍을 의미한다. 유연함 많은 Third Party의 지원으로 라이브러리가 많고, 유연성과 확장성이 뛰어나다. 예를 들어서 버전 호환성 문제를 겪거나 아키텍쳐를 대거 수정해야하는 등의 불필요한 트러블..
1. 마이크로서비스 기획 (1) 사용자 유형 분석 사용자의 분류 : 국내 거주 외국인, 내국인 사용자의 명칭 : 사용자 사용자의 역할 : 커뮤니티 조성 및 채팅 기능 사용/자신의 프로필 관리 사용자의 권한 : 글 작성, 댓글 작성, 채팅 기능 사용 사용자들이 속한 조직 : 국내 거주 외국인 (교환학생, 유학, 취업 등) (2) 서비스 수준에서 업무의 흐름을 분석 (3) 핵심 업무 및 우선순위 핵심 업무와 비핵심 업무를 구분 이들 간의 우선순위를 정하고, 기술 검증을 위한 선행 개발/MVP를 뭘로 할지/애자일 스크럼 방법론의 스프린트 백로그의 우선순위로 연계해서 사용할 수 있다. 핵심 업무 게시판 기능 채팅 기능 비핵심 업무 회원 관리 (4) 상관 분석 서비스의 결합 관계를 낮추고 데이터 간 연관성을 최소..
프로그램을 만들 때 함수를 설계하는 것은 간단하지만 매번 어려운 작업이다. 함수를 만들고 나면 너무 많은 기능이 포함되어있는 것 같아 함수를 분리해야할 필요성을 자주 느낀다. 또, 변수 이름을 짓는 것만큼 함수 이름을 짓는 것도 매번 고뇌이다. 이러한 문제점들을 3장의 내용을 통해 해결의 실마리를 찾고 싶고, 어렴풋이 알고 있었던 "구조적 프로그래밍"의 개념도 확실히 익히고자 한다. 작게 만들어라 ! 필자는 Sparkle 이라는 자바/스윙 프로그램을 예시로 들어 적은 양의 코드의 중요성을 알려준다. Swing 은 자바의 GUI 컴포넌트의 한 종류이다. 이 프로그램은 각 함수가 명백하고, 각 함수가 이야기 하나를 표현한다. if, else, while문에 들어가는 블록은 한 줄이어야 한다. 그 줄에서 다른..
아주 간단한 프로그램을 만들 때도 네이밍을 하는 것이 가장 고뇌이다. 이 장에서는 변수, 객체, 클래스, 함수 등 작명을 해야할 때 유념해야 할 규칙을 설명해주고 있다. 의도를 분명히 밝혀라 변수나 함수, 클래스의 이름에는 아래 질문에 답할 수 있는 정보가 포함되어야 한다. 변수(혹은 함수, 클래스)의 존재 이유는 ? 수행 기능은 ? 사용 방법은 ? 주석 없이 이름만으로 읽는 사람이 해당 자원의 정보를 캐치할 수 있도록 작명해야 한다. 코드는 단순하기보다는 함축적이어야 한다. 코드 맥락이 코드 자체에 명시적으로 드러나야하며, 이를 다양한 기법으로 구현할 수 있다. 아래 예시를 보자 ! public List getFlaggedCells(){ List flaggedCells = new ArrayList();..
이전에 회사 인턴 면접을 볼 때, "좋은 코드"가 무엇인가? 에 대한 질문을 받았다. 돌아가기만 하는 코드를 짜왔던 나에게 좋은 코드에 대해서 깊이 생각해 본적이 없어서, "추후 유지보수 시 리팩토링하기 용이한 코드", "다른 개발자들이 읽기 쉬운 코드"라고 두루뭉술하게 답변했다. 추상적으로 말했지만, 구체적으로 프로그래밍 시 좋은 코드를 만들어 내는 방법을 알지는 못하였다. 어떻게 좋은 코드를 짤 수 있을지 개발자로서 한 번도 생각하지 못한게 나중에 실이 될 것 같아 "클린 코드"라는 책을 사서 읽게 되었다. 코드가 존재하리라 책에서도 언급했다시피, chatGPT와 같이 자동으로 코드를 생성해주는 시대가 왔다. 그러나 코드는 요구사항을 상세히 표현하는 수단이다. 따라서 인간의 창의력과 직관, 감정을 가..