728x90
반응형

전체 글 143

AOP

예제는 깃허브에 있다. AOP (Aspect Oriented Programming) AOP는 스프링의 핵심 구성요소중 하나이다. 관점지향 프로그래밍은 프로그램 구조에 대한 또 다른 사고방식을 제공하며 객체 지향 프로그래밍을 보완해준다. OOP의 모듈화 핵심 단위 클래스 AOP의 모듈화 단위 관점 (aspect) AOP는 횡단 관심사의 분리를 허용해주어 모듈성을 높이는 것을 목표로 하는 패러다임이다. 코드 자체를 수정하지 않고 기존 코드에 추가 동작을 추가해서 수행한다. 개념 그리고 용어 Aspect 여러 클래스에 중복되어 있는 관심사의 모듈화 대표적인 예로 트랜잭션 관리가 있다. Spring AOP 에서는 @Aspect를 사용한다. JoinPoint 메소드 실행이나 예외 처리와 같은 프로그램 실행중인 지..

Spring 2022.08.10

이진트리

이진 트리 순회 불과 반년전만 해도 이름만 들었지 마냥 먼곳에 있다고 생각했던 자료구조들이다. 근데 공부하면서 깨닫는 것은 뭐를 알아야 준비를 하고 공부도 하고 재밌게 문제도 풀 수 있다는 것이다. 그것이 바로 코딩테스트 😱 DFS니 BFS니 하려면 일단 스택, 큐, 배열, 재귀에 대해서 알아야된다고 생각했다. 물론 그리고 지금 포스팅하는 이 이진 트리에 대해서도 좀 짚고 넘어가야 한다고 봤다. 이진트리란? 이진트리는 각각의 노드가 아래 자식 노드를 최대 두개를 가진 트리 자료 구조이다. 위 이미지는 위키백과 에서 가져와봤다. 깊이(depth)는 3이고 크기는 9인 이진트리이다. 1 2 3 4 5 6 7 이런식으로 구성된 트리가 있을 때 전위 표기식으로 순서를 나타내는 알고리즘을 구성해보자 코드 publ..

CS/자료구조 2022.08.10

@ExceptionHandler

@ExceptionHandler 예외 처리기가 어떻게 동작하는지에 대해서 궁금했어서 업무중에 돌려보게 되었다. (예제코드는 다시 작성할 예정) 일단 동작과정은 DB에서 해당 id를 찾아 검색했을 때 없을 경우 예외를 던져주게 하는 예시 간단하게 보면 public class UserService { private final UserRepository userRepository; public User findById(final int id) { return userRepository.findById(id) .orElseThrow(() -> new NotFoundException("해당 유저를 찾을 수 없습니다")); } } 라고 로직을 구성했을 때 이 로직의 예외에 대한 핸들러 동작을 파보게 되었다. 일단 ..

Spring 2022.08.10

Select Sort 선택정렬

선택 정렬 (Select Sort) 선택 정렬은 현재 위치에 들어갈 데이터를 찾아 선택하는 알고리즘이다. 오름차순을 기준으로 정렬한다. 개념 제자리 정렬의 알고리즘 중 하나이다. 정렬 되지 않은 입력된 배열 외에 다른 메모리를 사용하지 않는다. 해당하는 n번째에 넣을 정렬된 원소 자리는 이미 정해져있고, 어떤 값을 넣을지를 선택하는 알고리즘이다. 동작 과정 주어진 배열에서 최솟값을 찾는다. 그 최솟값을 배열의 맨 앞의 수와 자리를 교체해준다. 맨 처음 값을 뺀 나머지 배열로부터 최솟값을 찾는다. 교체한 다음 맨 앞의 배열과 값을 바꿔준다. 이 과정을 정렬이 완료될 때까지 계속 반복한다. 보기 좋은 예시 이미지를 가져와봤다. 이제 그러면 구현을 해보도록 하자. Select Sort 구현 n 길이를 가진 배..

CS/알고리즘 2022.08.10

자료구조

자료구조 자료 구조의 사전적인 의미는, 효율적인 접근 및 수정을 가능케하는 자료의 조직, 관리, 저장을 의미한다. 그래서 이 자료구조는, 데이터들의 값 모임, 데이터간 관계 들을 의미한다. 이 사전적 의미를 보니까 알고리즘과 뗄래야 뗄 수가 없는거 같다. 결국 이 선택에 따라 효율적으로 알고리즘을 설계를 할 수 있으니까 말이다. 들어가며 이 자료구조들은 당연히 여러 가지가 있으며, 각각의 자료구조는 각자의 연산과 목적에 맞춰져 있다. 단순히 알고리즘 문제들만 풀 때 자료구조를 선택한다? 답은 NO 어떠한 기능을 설계함에 있어 자료구조를 선택하는 것은 필수일 것이다. 자꾸 예를 알고리즘으로 들어서 그렇지만, 이만큼 알고리즘과 뗄래야 뗄 수가 없다는것. 자료구조가 명확해지면, 그에 따라오는 알고리즘이 반드시..

CS/자료구조 2022.08.10

업무 리팩토링에 대한 회고

회고록 블로그를 옮기게 되어 날짜가 맞지 않는다. 작성일 : 2022년 2월 21일 서비스 회사로 와서 벌써 1달 반정도가 지났다. 스타트업인지라, 먼저 있었던 사람들을 욕할건 아니다. 그렇지만 지금 그렇게 쳐나가면서 생겼던 기술부채로 인해서 신규 개발건이 들어왔을 때 유지보수가 힘든 점들이 많다. 무책임했던 누군가 기존에 있던 백엔드 개발자가 나가고 없었기에 모르겠지만 그사람은 자바에 엄청난 자부심이 있다고 했다. 하나의 리파지토리 를 의존하는 것이 가장 좋다. 라고 생각을 했다. 그리고 여러 비즈니스 로직을 담는 클래스 -> 서비스 인것 같은 뉘앙스가 많이 풍겼다. 흔히 볼 수 있는 Layered Architecture 로 구성이 되어있다. 근데 참조가 너무 많은거다. 😭 이 상황에서 퍼사드 패턴을 ..

Diary 2022.08.10

Monolithic vs MSA

모놀리식과 MSA에 대해 차이를 정리해 보겠다. MSA가 등장하기 이전에 하나의 서비스로 하나의 애플리케이션을 만드는 것. 이게 바로 Monolithic Architecture(모놀리식 아키텍처) 라고 한다. MSA는 Micro Service Architecture 의 줄임말로 하나의 큰 애플리케이션을 작은 애플리케이션으로 나눠서 만드는 아키텍쳐이다. Monolithic Architecture 사전적 정의를 보면 단단이 짜여 하나로 되어있는 이라는 뜻으로 나와있다. 그렇기에 이 애플리케이션의 규모는 거대하다. 장점 로컬 환경에서의 개발 편리성 통합 시나리오 테스트 용이 배포 간단 단점 코드의 수정 및 추가가 힘들다 효율적 자원관리가 힘들다 자주 업데이트 불가능 신기술 적용의 힘듦 부분적인 서버의 장애 -..

아키텍처 2022.08.10

Service Layer에 대한 생각

Service Layer 이직하고 프로젝트에 대해 구조 파악을 하면서 리팩토링을 진행중에 좀 생각하게 된게 꽤많았다. 사실 서비스 레이어라고 해서 비즈니스 로직을 다 넣는건가? 또는 비즈니스 로직이 다 들어가 있는 것이다. 라는 얘기들이 많았다. 사실 나도 그렇게 생각했었던 사람중 1명이었다. 이게 근데 잘못된 생각이었다. 결국엔 사실 소스 코드를 다 분리하고 봐도 하나로 합쳐져서 동작하게 되는건 사실 맞다고 본다. 그러니까 다시 말하면 클래스 하나의 메소드에서 엄청나게 많은 줄을 가지고 개발을 할 수도 있다는 것이다. 근데 이거는 객체 지향 설계 관점에선 너무 안좋은 것이고 각자의 책임이 있을 것인데 그걸 분리한게 객체 지향인거다. Service Layer에 대한 오해 일단 이 서비스 레이어에서는 비즈..

Spring 2022.08.10

클라이언트 식별과 쿠키

# 클라이언트 식별과 쿠키 이 장에서는 서버가 통신하는 대상을 식별하는데에 사용하는 기술을 알아본다. ## 개별 접촉 HTTP는 익명으로 사용하며 상태가 없고 요청(Request)과 응답(Response)로 통신하는 프로토콜 현대의 웹 사이트들은 개인화된 서비스들을 제공하고 싶어한다. ### 개별 인사 개인에게 맞춰져 있는 것처럼 느끼게 하려고 사용자에게 특화된 환영 메세지나 페이지 내용을 만듦 ### 사용자 맞춤 추천 고객의 흥미가 무엇인지 학습해서 고객이 좋아할 만한 상품을 추천해준다. 개개인의 기념일이나 생일이 다가오면 그에 맞는 상품을 제시할 수도 있다. ### 저장된 사용자 정보 배송지 주소와 카드 정보를 매번 입력받게 하지말고 데이터베이스에 저장하여 저장하는 경우를 말한다. ### 세션 추적 ..

CS/네트워크 2022.08.10
728x90
반응형