본문으로 건너뛰기

stack — 최근 글

최근
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
BlogThink

2022 4/4 중간점검

SQL 쿼리 전략 (explain, join, pk) Spring F/W Aspect API 설계 (DTO, ResponseEntity) 대외 활동 한빛미디어 서평단 활동 게시판 프로젝트 v2 2월 : 자바스크립트 무던한 개발자를 위한 모던한 자바스크립트 3월 : MSA 자바 마이크로서비스를 활용한 SRE 4월 : MSA 도메인 주도 개발 시작하기 5월 : RDB 김상형의 SQL 정복 6월 : MSA 소프트웨어 아키텍처 101 7월 : MSA 클라우드 네이티브 애플리케이션 디자인 패턴 8월 : 오늘부터 IT를 시작합니다 9월 : J
BlogBook Review

혼자 공부하는 컴퓨터구조 운영체제 - 책 소개

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다." 제목 : 혼자 공부하는 컴퓨터구조 운영체제 저자 : 강민철 한빛미디어, 2022 국내에서 컴퓨터 구조, 운영체제 과목을 대학 강의가 아닌 책으로 접하기 위해서는 여러 대학 교재를 보거나 흔히 공룡책으로 불리는 Operating System Concepts 를 보는 수 밖에 없었다. 후자를 혼자서 독파한 경험으로 효과는 좋았으나 노력 대비 시간이 너무 많이 들었다. 그렇다고 문턱이 낮은 책들은 내용이 빈약하거나 내용의 깊이가 전공을 커버하기엔 부족함이 있
FundamentalProblem solving

String, StringBuilder 주요 메서드

Java problem solve를 위한 String과 StringBuilder의 주요 메서드 정리. StringBuilder에 최적화 된 작업 위치 기반 삽입, 제거 StringBuilder는 못하지만 String으로 할 수 있는 것 문자열 합치기, 대체, 분할, 트림 등 거의 대부분의 유틸성 작업 사족) String 쓰면서 로 문자열을 붙이는것이 거의 죄악 취급이지만, 그런 소스가 있더라도 컴파일러가 판단하여 StringBuffer에 append로 변경한다. 생각보다 최적화를 잘 함.
EngineeringCo-work

GitHub Actions 으로 배포 단계 세분화 하기

이전에 쓴 GitHub Actions 글이 조회수가 좋아 업데이트 겸 추가 글을 써본다. 사실 저번에 올린 글은 여기저기 많이 돌아다니는 흔한 자바 프로젝트 배포를 위한 Actions 스크립트를 갖다 쓴것이고, 저번 8월 즈음 시간이 생겨 몇가지 더 챙겨봤다. 해당 전체 코드는 GitHub 링크를 첨부한다. 고려해야 할 것은 두가지 정도로 압축된다. 첫번째는 빌드를 어떻게 할 것인가. 두번째는 배포를 어떻게 할 것인가. 기존의 스크립트는 빌드를 호스트에서 하는것으로 빌드 시간이 호스트에서 발생한다. 그래서 호스트가 여러대라면 N대