본문으로 건너뛰기

stack — 최근 글

최근
BlogThink

2023 2/4 중간점검

뒤늦은 2Q 정리, 너무 바빴고, 사건사고도 많고, 변화도 너무 많았다. Java Reactor 자바의 스트림 데이터 처리: Flux and FluxSink 리엑터의 테스트: StepVerifier pub/sub 패턴 Backpressure Spring Security 다수의 인증 처리 동시 구현 (OAuth2, formLogin, 커스텀 로그인) Spring Session 세션 공유 스토리지 (세션 직렬화기) 본격 JPA fetch 전략 (연관관계) WebSocket 백엔드 구현 netty 기반 리액티브 백엔드 구현 SQL 데이터
Java EcoSpring Framework

스프링 부트에서 Multipart - 다운로드편

1편의 업로드 기능을 구현했다면 2편에서는 다운로드를 위한 Controller 와 리소스를 가지고오는 부분에 대해서 설명하겠다. 전편에서 업로드를 구현하기 위해 Multipart 를 사용했다면 이번 편에서는 파일 식별자로 어떻게 파일을 특정하고 응답으로 파일을 내려줄 수 있는지 구현해본다. 바이너리는 org.springframework.core.io.Resource 를 통해 응답을 내려주는것이 특징이다. 컨트롤러부터 보자. 컨트롤러에서 파일을 내려 줄 때 두가지 유형이 있다. 웹 브라우저에서 다운로드 속성을 갖는 응답 이미지 같이
Java EcoSpring Framework

스프링 부트에서 Multipart - 업로드편

이번에도 전편의 인기에 의해 불려나온 후속편이다. 지난번 아무것도 모르던 시절, 아파치의 commons-io 를 활용해 CommonsMultipartResolver 로 구현했다. 이번에는 스프링의 MultipartFile 를 이용해 파일 업로드 기능을 구현해보겠다 (현재 개인 프로젝트에 이 방식을 사용중) 아울러 김영한 강사님의 스프링 MVC 강의에 이같은 내용이 많기 때문에 이번에는 파일을 서빙하고 저장하고 관리되는 관점에서 글을 더 풀어보겠다. 이 글을 작성하는 시점에서 스프링6가 정식으로 나와있는데 아파치의 commons-io
BlogThink

2023 1/4 중간점검

2022 4분기 큰 결정 후 일어났던 일들에 대한 기록. 경력지원으로 현재 하고 있는 커머스 분야와 자바에 범위를 좁혀서 선별 지원 결과 30전 0승 30패 몇 군데 더 있는데 미열람 업체들은 제외함. 면접 및 코테 소감 경력 코딩 테스트 그렇게 어렵지 않다 면접 어렵다 어떤 대기업의 수시 채용은 이력서를 한 달 반을 들고 있는다. 미국회사 아님. 면접 결과 코틀린 해야된다. TDD 해야한다. 도커 해야한다. 를 느낌. 뭐에 집중하겠냐는 본인 취사 선택이지만 요즘 유투브에서 이력서 첨삭해주는거랑 현장이랑 괴리감이 있다. 결론 : 남
Java EcoSpring Framework

Redis를 RDB처럼 쓰려고 했던 시도

🫠 실패에 대한 짧은 결론 : 레디스는 인메모리 DB로써 빠른 IO를 요구하는 작업에 최적화 되어있다. 예를 들면 세션 클러스터링이나 캐싱에 많이 사용된다. 그러나 Entity를 계층 구조로 만들고 깊은 내부의 있는 필드에 Document나 RDB 하듯 LIKE 쿼리를 구현하는 것은 바람직하지 않아보인다. 물론 단순한 구조의 Entity에 id필드를 지정하고 id를 가지고 직렬화/역직렬화 하는 것은 가능하다. 결론적으로 key로 value에 바로 접근할 수 있는 Set이나 Hash구조 일 때 의미가 있어보인다. 웹 기반의 채팅 프
Java EcoJava programming

Spring의 테스트 주도 개발 스타일

TDD란 무엇인가? 를 떠나서 스프링 프로젝트에서 TDD를 어떻게 진행하는지에 대한 정리. TDD는 기본적으로 테스트 코드를 빌드업 해가면서 개발함. 즉, 이미 한참 완성된 코드를 테스트 하는건 TDD의 방향이 아님. 이런 경우는 있을까? 서비스 로직을 먼저 POJO로 만든다. 테스트 할 로직을 우선으로 만들면서 서비스 클래스, 엔티티, 영속성 클래스를 만든다. 서비스 로직에서 필요한 메서드, 클래스 등은 이너클래스로 먼저 개발 한 뒤 테스트가 완료되면 IDE를 통해 리팩토링 기능으로 꺼낸다. (IntelliJ → Move Inne
Java EcoJPA

JPA의 연관관계와 즉시로딩 이슈

테이블과 객체의 연관관계에 대한 패러다임의 차이가 있다. 테이블은 연관관계라고 할 만한 것이 없다 (constraint 제외) 테이블간 연관관계가 필요하면 JOIN을 통해 관계를 갖는 방법 뿐이다. 반면 객체는 참조용 필드가 있으면 그쪽으로 참조가 가능하다. 클래스 내 멤버의 참조를 통해 이뤄진다. 이를 통해 양방향과 단방향 모두 관계를 정립할 수 있다. 테이블은 외래 키 하나로 두 테이블이 연관관계를 맺는다. 객체는 양방향 관계가 필요할 경우 양 객체에서 각각 참조가 필요하다. 외래키를 들고있는 쪽이 연관관계의 주인. 이것은 다(
Java EcoSpring Framework

Spring WebFlux vs Spring MVC

웹 어플리케이션을 위한 Spring MVC (블로킹)과 Spring WebFlux(넌블로킹) 방식이 있음 물론 Spring MVC안에서도 @Async 어노테이션으로 비동기 처리를 활성 할 수 있으나 Filter, Interceptor 자체가 동기 처리라 엄청난 성능 향상은 없음 Spring WebFlux에도 Spring MVC와 마찬가지로 @Controller 어노테이션이 있있음. Spring MVC와 큰 차이라면 스트림을 위해 반환에 Mono, Flux를 사용. Spring MVC 는 톰캣 서블릿을 사용하는 프레임워크 고 WebF