2022/12 10

Spring Framework Core (2) - Spring Bean 주입 방법 및 예시

스프링 빈 스프링 빈은 이름, 타입, 객체로 구성 @Configuration + @Bean 프레임워크를 설정할 때 애플리케이션을 설정할 때 애플리케이션 전체에서 공통으로 사용할 때 @ConponentScan + Stereotype Annotation 비즈니스 로직을 처리할 때 예시로 들어가기전 file tree KaKao & Member는 NotificationService를 상속받고 있다. Spring Bean 주입 - @Bean + @Configuration : 01 메서드의 파라미터 전달 @Configuration public class JavaConfig { @Bean public MemberRepository memberRepository() { return new MemberRepository..

사내 교육 - Spring Framework Core (1)

개요 코로나가 잠잠해진 지금 사내에서는 몇몇 오프라인 강의를 선보였다. 강사는 사내 다른 법인의 분이였고, 개발 관련 책을 무려 7권이나 쓰셨다고 한다. 그분이 강의하신 Spring Framework Core를 수강하였고, 자료를 정리하였다. Why Spring Framework?? 생산성 품질 사실상 표준 JAVA 프레임워크 - JAVA 대안이없음 엔터프라이즈 애플리케이션에 적합한 JAVA 프레임워크 엔터프라이즈 애플리케이션이란 무엇? 다른 JAVA 웹 프레임워크들 Spark vert play netty EJB 대신 Spring을 사용하는 이유 비침투적인 프레임워크 EJB는 implements 다 구현 해야함 → 침투 스프링은 최대한 막음 POJO(Plain Old Java Object) - 순수자바 ..

JPA - saveAll vs save (2)

saveAll()과 save()의 내부구현 save() 메서드의 구현 코드이다. @Transactional @Override public S save(S entity) { Assert.notNull(entity, "Entity must not be null."); if (entityInformation.isNew(entity)) { em.persist(entity); return entity; } else { return em.merge(entity); } } saveAll() 메서드의 구현 코드이다. @Transactional @Override public List saveAll(Iterable entities) { Assert.notNull(entities, "Entities must not be n..

JPA - saveAll vs save (1)

JPA에서 여러개의 데이터를 DB에 INSERT 할 때saveALL()을 이용하면 성능 좋게 사용할 수 있다. save() 사용 save() 메서드의 구현 코드이다. @Transactional @Override public S save(S entity) { Assert.notNull(entity, "Entity must not be null."); if (entityInformation.isNew(entity)) { em.persist(entity); return entity; } else { return em.merge(entity); } } entityManager를 통해 새로 들어가면 persist, 기존에 있다면 merge 을실행한다. Mysql 문법으로 보면 아래와 같다. INSERT INTO ..

성공과 실패를 결정하는 1% 네트워크 - 서버에 접속한다.

Story 02 서버에 접속한다. 1. 접속의 의미 클라이언트에서 소켓을 만든 직후에는 아직 아무것도 기록되어 있지 않으므로 통신에 대한 아무런 정보가 없다. 서버(목적지)의 IP주소나 포트 번호를 프로토콜 스택에 알리는 동작이 필요한데, 이것이 접속 동작의 한 가지 역할이다. 클라이언트와는 다르게 서버측은 목적지가 없기 때문에 IP주소나 포트 번호에 대한 정보를 알 수 없다. 그래서 클라이언트에서 자신의 IP 주소,포트 번호를 전달하면 서버측의 프로토콜 스택도 이에 대한 정보를 알 수 있다. 접속동작의 첫 번째 동작은 통신 상대와의 사이에 제어 정보를 주고받아 각자의 소켓에 필요한 정보를 기록하여, 데이터 송 수신 가능한 상태로 만든다. 여기서 제어 정보는 데이터 송 수신 동작을 제어하기 위한 정보이며..

이펙티브 자바 - ITEM 42 익명 클래스보다는 람다를 사용하라

익명 클래스 JDK 1.1이 등장하면서 함수 객체를 만드는 주요 수단은 익명 클래스가 되었다. 아래코드는 문자열을 길이순으로 정렬하기 위한 비교 함수를 익명 클래스로 나타내었다. Collections.sort(words, new Comparator() { public int compare(String s1, String s2) { return Integer.compare(s1.length(), s2.length()); } }); 람다식의 등장 자바 8에 와서는 함수형 인터페이스를 람다식을 사용해 만들 수 있게 되었다. 람다는 함수나 익명 클래스와 개념은 비슷하지만 코드는 훨씬 간결하다. 아래 예제는 앞의 코드를 람다식으로 바꾼 코드이다. Collections.sort(words, (s1, s2) -> I..

성공과 실패를 결정하는 1% 네트워크 - 소켓을 작성하다.

Story 01 소켓을 작성한다. 1. 프로토콜 스택의 내부 구성 프로토콜 스택에는 TCP와 UDP라는 데이터 송 수신을 담당하는 프로토콜이 있다. 애플리케이션에서 보낸 의뢰를 받아 송수신 동작을 실행한다. 브라우저나 메일 등의 일반적인 애플리케이션이 데이터를 송 수신할 경우에는 TCP DNS 서버에 대한 조회 등에서 짧은 제어용 데이터를 송 수신할 경우에는 UDP 그 아래에는 IP 프로토콜을 사용하여 패킷 송 수신 동작을 제어하는 부분이 있다. 인터넷에서 데이터를 운반할 때는 데이터를 작게 나누어 패킷이라는 형태로 운반하는데 이 패킷을 통신 상대까지 운반하는 것이 IP의 주 역할이다. IP 안에는 ICMP와 ARP라는 프로토콜을 다루는 부분이 포함되어 있다. ICMP : 패킷을 운반할 때 발생하는 오류..

Arrays.asList() vs Collection.singletonList() vs List.of()

사용법 3개의 메서드 모두 배열을 List로 변환하는 기능을 한다. 예시를 보면 바로 이해가 갈 것이다. //List.of String [] temp = {"a","b","c","d"}; List aslist = Arrays.asList(temp); //Collection.singletonList String [] temp2 = {"a"}; List singletonList = collection.singletonList(temp2); //List.of 메서드 String [] temp3 = {"a","b","c","d"}; List listOf = List.of(temp3) 위와 같이 배열을 List 타입으로 변환해준다. 위 예제에서는 String 타입 List 인데 다른 타입( ex) class, i..

서버 개발자로 살아남기 - 서블릿 컨테이너에 대해

Servlet 컨테이너란? Servlet 컨테이너는 말 그대로 Servlet을 담고 관리해주는 컨테이너다. 자세히는 Client의 Request를 받고, Response을 할 수 있게 웹 서버와 소켓을 만들어 통신한다. 대표적인 Servlet 컨테이너로 Tomcat(톰캣)이 있다. 톰캣도 마찬가지로 웹 서버와 소켓을 만들어 통신하며 JSP와 Servlet이 작동할 수 있는 환경을 제공한다. Servlet 컨테이너의 역할 웹 서버와의 통신을 지원한다. 서블릿 컨테이너는 서블릿과 웹서버가 통신할 수 있게 네트워크 통신에 필요한(Socket) 등을 API로 제공한다. 서블릿 생명주기(LifeCycle) 관리 서블릿 컨테이너는 서블릿의 생성과 파괴를 관리한다. 서블릿의 생명주기(LifeCycle) 서블릿 cla..

성공과 실패를 결정하는 1% 네트워크 - IP 주소를 DNS 서버에 조회한다.

Story 02 IP 주소를 DNS서버에 조회한다. 1. IP 주소의 기본 인터넷은 TCP/IP의 개념에 기초하여 만들어졌다. TCP/IP는 서브넷이라는 작은 네트워크를 라우터로 접속하여 전체 네트워크가 구성되어진다. 서브넷이란, 허브에 여러 대의 PC가 접속한 상태라고 생각한다. 여기에 ‘동번지’ 라는 형태로 네트워크 주소를 할당한다. 좀 더 큰 범위인 ‘동’에 해당하는 번호는 서브넷에 할당(네트워크 번호), ‘번지’에 해당하는 번호는 컴퓨터에(호스트 번호) 할당한다. 네트워크 번호와 호스트 번호를 합쳐서 IP주소라 한다. 액세스 대상의 서버까지 메시지를 운반할 때는 이 IP주소에 따라 액세스 대상의 위치를 파악하고 운반한다. 만약 메시지를 보내면 서브넷 안에 있는 허브가 운반하고 보낸 측에서 가장 가..

728x90