분류 전체보기 32

동작 파라미터화란?

동작 파라미터화 동작 파라미터화(Behavior Parameterization)란 메서드의 동작을 파라미터로 받음으로써 변화에 대응하기 좋은 디자인 패턴이다. 예시로, 서비스에 User가 두 부류(Member, Designer)가 있다고 할 때, 한 서비스 객체에서 userList 중 Member만을 / Designer만을 filtering하는 메서드가 있다고 하자. 동작 파라미터화 없이 이를 구현하는 방법으로는 가장 간단하게 구현해보겠다. public UserFilterService { public List filterMembers(List users) { return users.stream .filter(user -> user.getRole().equals("MEMBER")) .collect(Coll..

Design Pattern 2023.07.02

Elasticsearch 클러스터 구성하기 with AWS EC2, WSL2

보통 elasticsearch의 클러스터의 노드들을 같은 LAN 안에서 (하나의 AWS 계정에서) 구성하는 예제들이 많았는데, 나는 개발 환경 상 세 노드를 각기 다른 LAN에서 구동해 클러스터를 구성해보았다. elasticsearch-8.8.1 기준이며, 설치 과정은 생략. + 운영 환경에서의 리눅스 설정(file descriptor / number of threads / virtual memory) 생략 컴퓨팅 환경 elasticsearch를 학습하기 위해 클러스터를 구성하였다. 구성 컴퓨팅 환경은 다음과 같다. 클러스터 1 - 노드 3 WSL2 한 대와 AWS EC2 두 대 (세 인스턴스 모두 다른 public IP) 클러스터 name : es-cluster-1 port http : 9200 tra..

Controller, Service, Repository 계층 간의 DTO

Velog에서도 포스팅 중입니다:) Springboot) Controller, Service, Repository 계층 간의 DTO DTO란, Data Transfer Objet로 데이터 전송 객체이다. 보통 개발시에 계층간에 도메인 전부가 아닌, 필요한 데이터만 모아서 Transfer의 역할을 하는 객체이다.이유를 설명하기에 앞서, DTO를 사용하지 않 velog.io DTO DTO란, Data Transfer Objet로 데이터 전송 객체이다. 보통 개발시에 계층간에 도메인 전부가 아닌, 필요한 데이터만 모아서 Transfer의 역할을 하는 객체이다. DTO를 사용하는게 좋은 이유 이유를 설명하기에 앞서, DTO를 사용하지 않는 경우와 사용하는 경우를 비교해보자. DTO 사용 X Service 계층에..

Design Pattern/OOP 2023.04.02

application.yml을 개발 환경마다 다르게 사용하기

Velog에서도 포스팅 중입니다:) Springboot) application.yml 환경마다 다르게 사용하기 개발을 하다보면 개발 옵션을 적용할 수 있는 applicaion.yml을 사용하게 되는데, 배포 환경에 따라 다르게 적용할 필요를 느낄 때가 있다. Develop 환경 / Release 환경 / Test 환경 등에서는 DB, server port velog.io 여러 개의 applicaion.yml 개발을 하다보면 개발 옵션을 적용할 수 있는 applicaion.yml을 사용하게 되는데, 배포 환경에 따라 다르게 적용할 필요를 느낄 때가 있다. Develop 환경 / Release 환경 / Test 환경 등에서는 DB, server port 등이 다르게 쓰이는 경우에 Build시에 매번 appl..

Spring/Spring Boot 2023.04.02

Tomcat의 동작 원리

Velog에서도 포스팅 중입니다:) Tomcat의 동작 원리 Tomcat이란 Servlet Container를 통해 Servlet을 제공하는 WAS (Web Application Server)이다.Servlet Container란 Servlet의 creation / execution / destruction을 관리하는 conta velog.io Tomcat Tomcat이란 Servlet Container를 통해 Servlet을 제공하는 WAS (Web Application Server)이다. Servlet Container Servlet Container란 Servlet의 creation / execution / destruction을 관리하는 container이다. Servlet Servlet이란 WA..

Java/Servlet 2023.04.02

클라이언트의 상태 유지 (Session, Cookie, JWT)

Velog에서도 포스팅 중입니다:) 클라이언트의 상태 유지 클라이언트와 서버는 주로 HTTP 프로토콜을 이용해 통신한다.Http의 대표적인 특징으로는 connectionless, stateless가 있는데, 비연결지향성과 무상태성이다. 이러한 Http의 특징으로 인해 클라이언트 - velog.io 클라이언트와 서버는 주로 HTTP 프로토콜을 이용해 통신한다. Http Http의 대표적인 특징으로는 connectionless, stateless가 있는데, 비연결지향성과 무상태성이다. 이러한 Http의 특징으로 인해 클라이언트 - 서버 통신간 클라이언트의 상태 유지를 별도로 해주어야한다. 😇 클라이언트 상태 유지 대표적인 방법으로는 쿠키 쿠키+세션 JWT 가 있다. 하나씩 알아보자. 🍪 쿠키 Cookie는 ..

대신 테스트한다! '테스트 더블'

Velog에서도 포스팅 중입니다:) 대신 테스트한다! '테스트 더블' 개발을 진행하며 테스트의 중요성을 요즘 정말 많이 느끼고 있다. 현재는 유닛테스트는 무조건 진행하고, 가능하다면 TDD로 진행하려고 한다. 하지만, 처음으로 진행했던 프로젝트에서는 단 하 velog.io 노가다 테스트... 개발을 진행하며 테스트의 중요성을 요즘 정말 많이 느끼고 있다. 현재는 유닛테스트는 무조건 진행하고, 가능하다면 TDD로 진행하려고 한다. 하지만, 처음으로 진행했던 프로젝트에서는 단 하나의 테스트도 작성하지 않고 개발했었다... 그 때는 일일이 눈으로 확인 + '이렇게 되겠지.' 하는 생각으로 개발했었다. 이런 개발은 변화에 취약하다고 생각이 든다. 테스트 없는 개발이 안 좋은 이유 테스트를 생각하면, 기능을 최소..

Test 2023.04.02

객체가 일하게 만들자

Velog에서도 포스팅 중입니다:) 객체가 일하게 만들자 요즘 개발하며 중심으로 생각하는 것이, 객체가 직접 일하게 만들자이다. 그동안 개발을 하며 테이블 중심으로 개발을 했었다. 그에 앞서서 객치지향이란 무엇인가? 나의 정의는역할을 가진 객 velog.io 일하는 객체 요즘 개발하며 중심으로 생각하는 것이, 객체가 직접 일하게 만들자이다. 그동안 개발을 하며 테이블 중심으로 개발을 했었다. 그에 앞서서 객치지향이란 무엇인가? 나의 정의는 객체지향이란 역할을 가진 객체들끼리 메시지를 주고받으며 협력하는 공동체라고 생각한다. 여기서 역할이란, 자신의 관심사에 책임을 가진 채로 행하는 기능을 의미한다. (ex 바리스타는 커피를 만든다는 관심사에 책임을 갖고 커피를 만든다라는 역할을 가졌다.) 그리고 메시지란..

Design Pattern/OOP 2023.04.02

ORM, 영속 상태로 만드는 순서

Velog에서도 포스팅 중입니다:) 영속 상태로 만드는 순서 의문점...Parent 객체가 Child 객체 c1,c2를 child로 가지는 연관관계가 있다면, em.persist()는 3번 호출해야 할 것이다. 그 순서를 바뀌어도 괜찮을까??case 1) velog.io 의문점... Parent 객체가 Child 객체 c1,c2를 child로 가지는 연관관계가 있다면, em.persist()는 3번 호출해야 할 것이다. 그 순서를 바뀌어도 괜찮을까?? Parent parent = new Parent(); Child child1 = new Child(); Child child2 = new Child(); parent.addChild(child1); parent.addChild(child2); case 1)..

ORM 2023.04.02

자바 ORM 표준 JPA 프로그래밍 - 기본편 / 즉시 로딩과 지연 로딩

Velog에서도 포스팅 중입니다:) 자바 ORM 표준 JPA 프로그래밍 - 기본편 / 즉시 로딩과 지연 로딩 em.find / em.getReference 두가지로 엔티티를 조회할 수 있는데,em.getReference는 프록시 객체를 반환해준다!!Member findMember = em.getReference(Member.class, member.getId());프록시 객체 velog.io 프록시 em.find / em.getReference 두가지로 엔티티를 조회할 수 있는데, em.getReference는 프록시 객체를 반환해준다!! Member findMember = em.getReference(Member.class, member.getId()); 프록시 객체는 실제 객체의 참조(target)를..

ORM 2023.04.02