분류 전체보기
Spring Bean
Spring Bean
2023.02.04Spring Bean 이란? Spring IoC 컨테이너가 관리하는 자바 객체를 Bean 이라고 한다. 즉, Spring에 의해서 생성되고 관리되는 자바 객체라고 한다. Spring Container Spring Container를 구성하는 ApplicationContext 다형성으로 구현된다. 여기에서 ApplicationContext가 인터페이스이고 AnnotationConfigApplicationContext 구현체가 된다. 만약에, 빈에 대한 설정정보를 AppConfig.class 에 등록해두면 이 정보를 보고 객체 생성을 하게 된다. 스프링 컨테이너는 (빈 이름 | 빈 객체)로 등록된다. 이러한 동적인 의존관계를 스프링이 설정해준다. ApplicationContext applicationCont..
Criteria API
Criteria API
2023.01.28Criteria API란? 자바 ORM 표준 JPA 프로그래밍에서 JPQL(객체지향쿼리) Java Persistence Query Language 을 자바 코드로 작성할 수 있도록 도와주는 빌더 클래스 API를 의미합니다. JPQL 조회를 위한 문자열 빌드에 하나의 대안으로 Java 오브젝트를 갖는 조회 빌드 API 입니다. JPQL은 런타임 중에 잘못된것이 있는지 확인해볼 수 있습니다. Criteria API 장단점 장점 빌더 클래스로 컴파일 단계에서 문법 오류를 확인해볼 수 있습니다. 쿼리문을 문자열 그대로 작성 시 발생할 수 있는 휴먼 에러를 방지할 수 있습니다. 단점 코드가 복잡해지면 가독성이 떨어지게 됩니다. API 사용에 대한 러닝커브가 존재합니다. Criteria API 기본 쿼리 Crite..
의존성 주입
의존성 주입
2023.01.21의존성 주입이 필요한 이유 의존성 주입이 필요한 이유는 객체 간에 결합도를 줄일 수 있기 때문이다. 의존성 주입 방법 스프링에서 의존성 주입(DI)을 위한 4가지 방법을 제공한다. 생성자 주입 Setter 주입 필드 주입 메서드 주입 1. 생성자 주입 생성자를 통해 의존 관계를 주입할 수 있는 방법이다. 이 방법은 생성자 호출시점에서 1번만 호출되는것이 보장된다. 불변인 상태에서 사용할 수 있다. @Component public class quackServiceImpl implements diService { private final QuackRepository quackRepository; @Autowired public quackServiceImpl(QuackRepository quackReposit..
Spring JPA 와 Transaction
Spring JPA 와 Transaction
2023.01.13시작 Spring JPA로 CRUD를 사용하는 경우 Repository 메소드를 이용하게 될텐데 기본적으로 @Transaction이 적용되어 있다. Spring에서 트랜잭션 처리를 지원해서 어노테이션 방식으로 @Transactional로 선언하여 사용할 수 있다. 이번 포스팅에서는 Transaction에 대해 알아보고 Spring에서 어떻게 사용할 수 있는지 정리해보았다. Transaction 설정하기 Transaction 설정하는 방법에는 크게 3가지 방법이 있다. 1. Spring 3.1부터 @EnableTransactionManagement 어노테이션을 이용해 @Configuration이 붙은 클래스에 트랜잭션 설정이 가능한 방법이 있다. @Configuration @EnableTransaction..
카프카 스터디를 시작하며
카프카 스터디를 시작하며
2022.12.03카프카 스터디를 시작하게 되었습니다. 데이터가 많이 들어오다 보니 자연스럽게 카프카로 애플리케이션간 데이터를 스트리밍형 ETL을 처리하게 되는것 같습니다. 그래서 시작하게된 스터디... 위 책 내용으로 정리해보면서 잘 몰랐던 개념들을 기록해두려고 합니다. 카프카의 모습 카프카는 어떤 모델인지 알아보면 기존에 시스템들은 Target 애플리케이션과 Source 애플리케이션 사이에 파이프라인이 많이 생기게 되면서 한쪽이 장애가 발생하게 되면 다른 한쪽의 애플리케이션에도 영향을 미칠 수 있게 되었습니다. 그래서 아파치 카프카를 도입하게 됩니다. 아파치 카프카가 일종에 중앙에서 데이터를 처리해주는 역할을 하는것 같습니다. 자료구조의 큐를 살펴보면 First In First Out 자료구조로 동작하게 됩니다. 데이..
모던 자바 인 액션 reduce
모던 자바 인 액션 reduce
2022.06.06stream 과 parallel stream 차이 (Java 8) - A parallel stream has a much higher overhead to a sequential one. https://stackoverflow.com/questions/20375176/should-i-always-use-a-parallel-stream-when-possible?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa Should I always use a parallel stream when possible? With Java 8 and lambdas it's easy to iterate over collections as strea..
백기선 자바 스터디 1 - 과제
백기선 자바 스터디 1 - 과제
2022.02.14JVM이란 무엇인가 Java Virtual Machine에 약어이다. JVM의 역할은 자바 애플리케이션을 클래스 로더를 통해 읽어 들여 자바 API와 함께 실행하는것을 의미한다. 컴파일 하는 방법 개발자가 자바 소스코드(.java)를 작성한다. 자바 컴파일러가 자바 소스파일을 컴파일 한다. 이때 나오는 자바 바이트 코드(.class) 파일은 아직 컴퓨터가 읽을 수 없다. 컴파일한 바이트 코드를 JVM 클래스 로더에게 전달한다. 클래스 로더는 동적로딩을 통해서 필요한 클래스를 로딩 및 링크 해서 JVM의 메모리 영역에 올린다. 실행엔진이 JVM 메모리에 올라온 바이트 코드들을 명령어 단위로 하나씩 가져와서 실행한다. 실행하는 방법 java -jar [file-name].jar 로 실행한다. 바이트코드란 무..
넥스트스텝 - 레이싱 카 2단계
넥스트스텝 - 레이싱 카 2단계
2022.01.30개요 기존 1단계에서 MVC 패턴으로 구조화하는 작업을 진행한다. 데이터를 전달할 때는 DTO를 이용한다. 프로젝트 구조 객체 InputDTO 입력과 파싱에 대한 필드를 저장한다. OutputDTO 출력과 관련된 필드 및 메소드가 작성되어 있다. CarMoveBehavior 전략 패턴을 사용한다. 여기에는 몇 가지 이유가 존재하는데 테스트 코드 작성 시 랜덤 넘버를 받기 때문에 테스트 코드 작성 시 어려움을 갖는다. 코드의 유지보수가 좋아진다. Cars Cars 객체의 목적은 Car 객체를 Wrapping 하기 때문에 일급컬렉션으로서 역할이 충분하다고 생각한다. 그 외 기능은 필요하지 않다. FixNumberBehavior 무조건 갈 수 있다. RandomNumberBehavior 랜덤 넘버 제너레이트 ..
넥스트스텝 - 레이싱 카 1단계
넥스트스텝 - 레이싱 카 1단계
2022.01.29개요 계산기 미션 다음에는 레이싱카 미션이다. 총 2단계로 구성되어 있으며, 1단계에서는 페어 프로그래밍을 2단계에서 MVC로 구조 전환을 수행하는것이다. 프로그램은 다음 플로우로 흘러간다. 1. 자동차, 횟수 입력한다. 2. 랜덤 넘버를 받아와서 4이상이면 전진할 수 있다. 단, 전진하는 경우 상태값을 콘솔에 출력한다. 3. 가장 많이 전진한 자동차를 우승자로 선정한다. 우승자는 복수가 될 수 있다. 프로젝트 구조 프로젝트 구조에서도 조금 아쉬운것은 domain package에 많은 객체가 포함되어 있다. 굳이 쪼갠다면 entity pacakge 정도 하나 더 둘 수 있을것 같다. Helper 클래스는 Racing 클래스 쪽으로 합칠 수 있을것 같다. 관련 비즈니스 로직이 명확하게 domain pack..
넥스트스텝 - 계산기 리뷰
넥스트스텝 - 계산기 리뷰
2022.01.29프로젝트 구조 제출한 프로젝트 구조이다. 2주차인 지금 회고해 보니 common package 대신 utils package 를 쓰는것 그리고 view package 에서 InputView, OutputView 를 만들어서 관리해주는것이 좋지 않았을까 생각이 든다. 추가로 Validation 패키지를 관리하면 좋지 않을까 생각했다. 객체 ErrorMessage 상수 메시지에 대한 책임을 가지고 있다. 일관된 [ERROR] 표시가 맘에든다. UserInput 대충 보아도 UserInput에 부여되는 책임이 너무 많다. Parsing, Validation, SplitString, UserInput 이 주요 내용이다. 하나의 클래스에 하나의 책임을 부여하는것이 좋을것 같다. 만약, 변경한다면 아래를 클래스로 ..
git cherry-pick으로 rebase 완성하기
git cherry-pick으로 rebase 완성하기
2022.01.28문제의 시작은 Merge가 되기도 전에 다른 branch에서 작업을 하다가 Merge가 된 후에 기본 branch의 작업을 가져와야 했었다. 이것을 rebase로 해결한 사례이다. 우선 Merge와 Rebase의 차이는 아래와 같다. Rebase와 Merge의 차이점 Merge로 통합하기 이 두 브랜치를 합치는 가장 쉬운 방법은 merge 명령을 이용해 3-way Merge로 새로운 커밋을 만들어내는 것이다. 이 때 내부적으로 공통조상인 C2를 이용하게 된다. Rebase로 통합하기 두 브랜치가 나뉘어 있는 아까와 같은 상황에서 시작한다. 대강 여기서 rebase를 이용할 예정이다. 왜냐하면 커밋이 깔끔하기 때문에. 전체 흐름을 파악했다면 문제인 요소에 대해 디테일하게 접근해보자. 문제는 다음과 같다. ..
11번가 SW 통합 지원기
11번가 SW 통합 지원기
2021.12.30서류 (11월 11일) 합격한지 시간이 조금 지났지만, 11번가 SW 통합 최종 합격에 대한 후기를 작성해보려고 합니다. 11월 11일 11stcorp.com 기준으로 23:59분까지 서류를 마감하였습니다. 마감일에 작성하게 되면 여러 지원자들이 서류를 제출하기 때문에 사이트에 지연이 발생할 수 있습니다. 이점 유의해서 미리 작성하는것을 추천드립니다. 저는 공고를 보고 서류 나온 당일날 제출하였습니다. !자기소개서 Tip 자기소개서는 명확하게 설명할 수 있는 내용을 작성하는것이 좋습니다. 코딩테스트 (11월 13일) 서류 제출하고 11월 13일, 이틀후에 코딩테스트를 보았습니다. 코딩테스트는 크게 어렵지 않았습니다. 결과는 11월 24일 나왔습니다. 1차 면접 & 사전 과제 & 인성검사 (12월 2일) ..