목록전체 글 (124)
지나공 : 지식을 나누는 공간
개요 지난 시간에는 Spring이 객체지향원칙을 지켜주는 방법의 도입부. 즉 그냥 단순하게 개발하면 어디서 SOLID 원칙이 여겨지는지 알아보고 스프링 컨테이너를 사용하면 그걸 어떻게 해결해주는지를 알아봤다. 그중에서도 ApplicationContext(스프링컨테이너)를 활용해서 싱글톤 빈을 관리하는 것까지 봤는데, 이번에는 그 활용 자체를 좀 더 편하게 하도록 스프링이 뭘 제공해주는지 보고 그 외 여러가지 스프링 기능들도 볼 예정이다. 영한님 강의 중 핵심원리 기본편의 마무리 글이다. 얼른 끝내고 MVC로 가자! 아래 포스팅에 이어지는 내용이다. https://eocoding.tistory.com/120 Spring 핵심 원리 기본편 Spring 핵심 원리를 오고가면서 쓰윽 들었다. 그래서 그간의 테스..
Spring 핵심 원리를 오고가면서 쓰윽 들었다. 그래서 그간의 테스트 코드들을 살펴보면서 아주 퀵하게 정리해보려 한다. 이미 너무나 유명한 영한님 강의!ㅎㅎ 좀 오글거리는 소제목들이 있지만 난 이렇게 써야 이해가 잘 가서 부끄러워도 그냥 썼다. 예제에 필요한 클래스들을 대충 정리하자면 아래와 같다. Member 관련 Member MemberRepository : 멤버 저장 DAO MemberService : 멤버Repository를 호출해서 실제 회원가입과 회원찾기 기능을 해주는 부분 Grade enum : 등급별로 멤버들의 할인정책이 바뀌기 때문에 어떤 등급의 멤버인지 등록할 때 사용한다. Order 관련 OrderService : 주문 생성에는 멤버정보 / 할인정보 / 상품정보가 필요하다. Orde..
들어가기 저번에 FeignClient로 다른 API를 호출할 때 그 API에서 반환한 Json 객체를 Java Object(Response객체)로 담는 과정에서 Java Object에 빈 생성자를 넣지 않아 에러가 난 적이 있었다. 지난 번엔 이걸 알아보기 전에 자바 소스 코드가 실행되는 과정을 다시 공부했었다. 보다보니 기본 API에 대해서도 잘 모르는 것 같아서 기본적인 API를 개발한 뒤 이걸 호출할 때 java 내에서 무슨 일이 발생하는지 순차적으로 알아보려 한다. https://eocoding.tistory.com/117 Java 안에서의 Interpreter와 Compiler 들어가기 직렬화 객체에 빈 생성자를 넣지 않았다가 Feign으로 외부 API 호출 시 에러가 났다. 그래서 직렬화 객체..
최근 우리 팀 서비스 중 이미지가 업데이트되지 않는 문제가 있었다. Redis에 올라간 데이터인데 TTL 이 없어서 그동안 업데이트가 되지 않은 게 원인이었다. TTL 이 없다고? 라는 충격과 함께 이번 기회에 우리팀 Redis가 어떻게 쓰이고 있는지 현황을 파악하는 시간을 가졌다. 1. key 추출 2. TTL 추출을 어떻게 할지에 대한 고민 : 결국 노가다 살짝ㅠㅠ 3. 히트율 계산 4. 결론. redis를 캐시의 관점에서 사용하자. 5. 파생 가능한 주제 : 로컬 캐시와 글로벌 캐시 활용, 적절한 TTL이 뭘까? 1. key 추출 일단 전체 key를 추출해야했다. 약 180만개 정도 있어서... 이게 과연 될까 싶었지만 추출되긴 했다. redis-cli --raw -p [포트번호] -h [레디스서버..
들어가기 직렬화 객체에 빈 생성자를 넣지 않았다가 Feign으로 외부 API 호출 시 에러가 났다. 그래서 직렬화 객체는 왜 빈 생성자가 필요한지 알아보려했다. 그러다보니 Reflection을 알아야 했고, 그러다보니 Java의 클래스가 로드되는 과정을 알아야 했으며, 그걸 보다 보니 Java의 소스 코드가 실행되는 과정을 알아야 했다. 예전에는 단순히 컴파일러와 인터프리터를 비교하고, 자바는 이 둘 다가 같이 쓰인다는 것까지만 이해했는데, 그보다 더 많은 내용이 있었다. 본래 알고 싶었던 빈 생성자와 reflection에 대해서는 다음으로 넘긴다ㅠ 나 분명 reflection 공부하려 했는데ㅠㅠㅠ 항상 공부하다보면 판도라의 상자 마냥 .. 모르는 게 많아서 끝도 없이 다른 주제로 가지가 쳐진다...^_..
서론 우리 회사 프로젝트는 MSA 구조를 이루고 있는데 그동안 나는 다른 MS를 호출할 업무가 없었어서 직접 써본 적은 없었다. 근데 이번에 FeignClient로 다른 MS의 API를 호출할 일이 생겨서, 외부 API를 호출하는 여러가지 통신 방법들과 간단하게 비교하려고 한다. 이번 포스팅은 스윽 훑어보는 거라 아직 제대로 흡수하지 못한 특징들도 있는데, 앞으로 구체적인 사용법을 공부할 예정이다. Spring Cloud MSA의 개발, 배포, 운영에 필요한 아키텍처를 쉽게 구성할 수 있도록 지원하는 Spring Boot 기반의 프레임워크. MSA를 위한 환경설정, 서비스 검색, 라우팅, 프록시 등 분산시스템 설정을 빠르게 할 수 있도록 도와준다. 여기서 지원하는 요소들은 대표적으로 아래와 같은데 이번 ..
토비의 스프링을 읽고 정리했다. 티스토리가 사라져버린 그 날에 노션에 정리했던 걸 옮겨본다. https://selective-bathtub-e65.notion.site/f72b75db1b8945e089d00b01c9bb5ada 목차 목차만 보고 절차를 대충 상기할 수 있으므로 목차는 매우 중요하다...ㅎㅎ 1.1 초난감 DAO DAO : 데이터를 조회하거나 조작하는 기능을 전담하는 오브젝트 책에서 초반에 DAO를 하나 만들었다. 데이터를 추가하는 add 메소드 안에는 세 가지 관심사항이 같이 들어있다. DB Connection을 가져오는 부분 실제 SQL Statement를 만들고 실행하는 부분 작업을 마친 뒤 Statement와 Connection 오브게트를 닫는 부분 → 왜 초난감 DAO인걸까? 문제..
아직 글또 7기 2회의 제출 회차가 남았지만 이른 회고를 해 보자! 글또 : 글쓰는 또라이가 세상을 바꾼다 글쓰는 개발자 모임 글을 작성하는 개발 직군 사람들이 모여서 좋은 영향을 주고 서로 같이 자랄 수 있는 커뮤니티로, 2주에 한번씩 본인의 블로그에 글을 쓰면 된다. 글 주제는 생각을 정리하는 회고가 될 수도 있고, 컨퍼런스 내용이나 책 내용을 요약하는 것도 가능하며, 트러블 슈팅 등 일반적으로 개발 블로그에서 쓰이는 주제들을 자유롭게 골라서 작성하면 된다. 글또를 알게 된 경로 11번가 신입 개발자 교육 때 NEXTSTEP의 슬랙에 가입하게 됐는데, NEXTSTEP이 우테코도 운영하고 타사 신입 교육도 많이 진행하다 보니 그 채널에 정말 많은 개발자가 모여 있다. 거기서 누군가가 글또 지원 링크를 ..
기존에 작성했던 글이지만 내용을 좀 더 보충해서 재발행한다. 우아콘2021 도메인원정대, DDD-start 책의 내용을 참고했다. 이번에 알아볼 것은, DDD란? Domain이란? Domain Layer? Domain Model? 도메인 모델링 해보기! + Aggregate 개념 이해 + Aggregate Root 큰 애그리거트와 작은 애그리거트 영속성 전이 속성 CasecadeType 과 DDD 속 Aggregate DDD(Domain Driven Design)란? 도메인 중심으로 설계하는 디자인 방법론 Domain이란? 소프트웨어로 해결하고자 하는 문제 영역. 애플리케이션 내 로직들이 관여하는 정보와 활동의 영역 쿠팡이나 11번가와 같은 오픈마켓을 구현하려면 아래 기능이 필요하다. 회원가입, 회원탈퇴..
git pull을 어떻게 할지 전략이 세가지가 있으니 선택해서 명시해달라는 내용이다. 타 블로그 왈 git 2.27부터 추가된 기능이라고 한다. 기존 git pull의 문제점 : 세 가지 전략으로 나뉘게 된 배경 git pull --help에서는 아래처럼 설명한다. In its default mode, git pull is shorthand for git fetch followed by git merge FETCH_HEAD. 번역하자면, 디폴트모드에서는 git pull이 git fetch, 즉 git merge FETCH_HEAD의 작업에 대한 간단명령어(속기)라는 말이다. 다시 말해 git pull의 내부 동작이 git merge FETCH_HEAD처럼 동작한다는 말이다. 따라서 이 디폴트모드에서는 g..