코드를 짜다가 아래와 같은 경험을 겪었습니다."외부 카카오톡 알림톡 API 가 버전업 되었는데, 서비스 레이어 코드까찌 싹 다 고쳐야 하네" "데이터베이스를 MySQL 에서 MongoDB 로 바꾸자고 하는데, 비즈니스 로직 전체를 뜯어야 하는구나" 저와 같은 고통을 겪고 있는 개발자분들은, 100% 고수준 컴포넌트와 저수준 컴포넌트의 관계가 잘못 설계되었기 때문일 것입니다.이 글을 쓰는 목적은 두 개념을 완벽하게 마스터하고, 단단한 코드를 짜기 위해 정리할 겸 같은 고민을 겪고 있는 개발자들에게 조금이나마 도움이 될 것 같아 정리하였습니다. 컴포넌트란 무엇인가?본론으로 들어가기 전에 '컴포넌트' 라는 단어부터 짚고 넘어가자면, 컴포넌트라고 하면 프론트엔드의 React 컴포넌트가 먼저 떠오를 수 있지만, ..
소프트웨어를 만들 때 우리는 필연적으로 '여러 개의 데이터' 를 다루게 됩니다.이때 아무생각 없이 아래와 같은 코드를 짤 수가 있습니다.List orderItems = new ArrayList();List cars = new ArrayList();List lottoNumbers = new ArrayList(); 이렇게 컬렉션(List, Map, Set 등) 을 아무런 보호 장치 없이 서비스 레이어나 여기저기에 날것으로 노출하는 순간, 코드는 서서히 스파게티로 변하기 시작합니다. 1급 컬렉션이란?소트웍스 앤솔러지라는 책의 '객체지향 생활 체조 원칙' 에서 처음 제안하였습니다."컬렉션을 포함한 클래스는 반드시 다른 멤버 변수를 가지지 않아야 한다" 즉, List 나 Map 같은 컬렉션을 하나의 클래스로 꽁..
다른 개발자분께서 도메인이 무엇이냐 라고 물어볼 때 정확히답변을 하지 못해 공부하면서 다른 개발자분들에게도 알려주기 위해 정리하였습니다. 다른 개발자들과 대화하거나 아키텍처 관련 책을 읽을 때 "도메인" 이라는 단어를 자주 들엇습니다."도메인 레이어를 분리해야 합니다.", "도메인 모델에 비즈니스 로직을 모으세요.", "그건 도메인이 아니라 인프라 영역입니다."대충 '비즈니스 로직이 들어가는 곳이네..' 하고 넘어가기는 했지만, 최근에 누군가 "그래서 도메인이 정확히 무엇인데?" 라고 물어보면 말문이 턱 막혔습니다. 따라서 오늘 이 글을 통해 소프트웨어 공학에서 말하는 도메인(Domain) 의 진짜 의미부터 시작해서, 왜 이 개념을 뼛속까지 이해해야 '지속 가능한 좋은 코드' 를 짤 수 있는지 아주 깊..
이 글은 단순한 작업 기록을 넘어, 비슷한 문제를 겪을 동료들에게 가이드가 될 수 있도록 작성하였습니다. 단순히 "배포에 성공했다" 는 결과보다, 그 과정에서 마주친 수많은 'Permission Denied' 와 '접속불가' 메시지들을 어떻게 논리적으로 해결했는지 초점을 맞췄습니다. 저와 같은 주니어 개발자분들에게 이 글이 도움이 됐으면 좋겠습니다. 대두분을 로컬 환경에서 테스트를 하고 Git 에 배포하는 과정만 하다가 실제 서비스를 24시간 꺼지지 않는 별도의 서버에 돌아가게 만들어보라는 요청에 Maven 과 Spring 기반의 프로젝트를 회사 원격 서버에 올리는 임무를 진행했습니다. Terminus 를 통해 서버에 접속하여 보안상 공용 계정이 아닌 내 전용 계정을 생성하여 작업을 진행하였습니다.톰캣..
Bean Validation검증 애노테이션과 여러 인터페이스의 모음이며 마치 JPA 가 표준 기술이고 그 구현체로 하이버네이트가 있는 것과 같다. Bean Validation 을 사용하려면 다음과 같은 의존관계를 추가해야 한다.build.gradleimplementation 'org.springframework.boot:spring-boot-starter-validation' @Data@NoArgsConstructor@AllArgsConstructorpublic class Item { private Long id; @NotBlank private String itemName; @NotNull @Range(min = 1000, max = 100000) private Integer price; @NotNul..
Filter 와 Interceptor 가 필요한 이유는 모든 로직에 대하여 인증 절차를 처리하는 Logic 이 있다면, 하나하나 등록을 하는 것 보다 한번에 처리할 수 있는 기능이 있으면 유지보수 하기 쉬워 사용하는 것이다.이렇게 애플리케이션 여러 로직에서 공통으로 관심이 있는 것을 공통 관심사(Cross-cutting concern) 이라고 한다. 필터 (Filter)필터를 적용하면 필터가 호출 된 다음에 서블릿이 호출된다.그래서 모든 고객의 요청 로그를 남기는 요구사항이 존재한다면 필터를 사용하면 된다.HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 컨트롤러 참고로 스프링을 사용하는 경우 여기서 말하는 서블릿은 스프링의 디스패터 서블릿으로 생각하면 된다. 필터 체인 (Filter Chain)..
마이바티스 MyBatis 는 JdbcTemplate 보다 더 많은 기능을 제공하는 SQL Mapper 이다.JdbcTemplate 와 비교해서 MyBatis 의 가장 매력적인 점은 SQL 을 XML 에 편리하게 작성할 수 있고 또 동적 쿼리를 매우 편리하게 작성할 수 있다.jdbcTemplateString sql = "update item" +"set item_name:itemName, price=:price, quantity=:quantity" +"where id=:id"; Mybatis update item set item_name = #{itemName}, price = #{price}, quantity = #{quantity} where id = #{id}또한 동적 쿼리도 아주 손쉽게 적용시킬..