전체 글

공부를 야무지게 해보겠습니다!! (알고리즘, 자료구조 문제 풀이 학습 및 기록)
🎯 빈 후처리기Spring에서 Bean을 생성하고 컨테이너에 저장하기위해서 빈 후처리기를 사용한다.빈 후처리기를 사용하면 @Bean과 컴포넌트 스캔 2가지 방식으로 빈을 등록하는 경우에 대해서 프록시 객체를 생성할 수 있게 해준다. SpringBoot는 @Baen, 컴포넌트스캔을 통해서 객체를 생성한다.그리고 생성된 객체를 빈 후처리기에 작업을 넘기고 반환받는다.반환받은 객체를 스프링 컨테이너에 저장하게 된다. 이 과정에서 빈 후처리기는 해당 객체가 프록시 객체로 바꿔져야 하는지 판단하고, 바꿀필요가 있다면 프록시 객체로 바꿔서 반환해준다.   이렇게 빈 후처리기를 개발자가 직접 정의해서 프록시 객체로 만들어 줄 수 도 있고, 스프링부트에서 제공해주는 기본적인 후 처리기를 사용할 수도 있다.Annota..
앞에서 스프링 AOP 동작원리를 알아보았는데, 핵심은 AOP로 동작할 객체를 그냥 Bean(객체)가 아닌 Proxy객체로 생성해서 스프링 컨테이너에 등록 해주는 것이었다.그렇다면 Proxy객체가 무엇이고, 무엇인데 AOP처럼 특정 동작을 끼워넣을 수 있는지 알아보면 좋을 것 같다. 🎯 프록시 객체프록시라는 단어는 중간에서 무엇인가를 대체한다는 의미를 가지고 있다.프록시 패턴이란 중간에 끼여서 작업을 대리로 처리하거나, 추가적인 작업을 끼워넣을 수 있는 패턴을 의미한다.Spring에서는 인터페이스가 존재하기 때문에 클라이언트는 인터페이스에게 명령하고, 실제 동작하는 구현체 객체는 알지 못한다.즉, 인터페이스를 구현하고 있는 실제 객체가 동작하는지, 프록시 객체가 동작하는지 알 수 없다는 의미이다. 프록시..
프로젝트에서 @Async를 적용 시켜보았다.@Async는 Spring AOP를 기반으로 동작하게 되는데, Spring AOP를 알아보자. 🎯 관점 지향 프로그래밍웹 개발은 보통 계층적인 구조로 나누어져 있다.Web Layer - json변환, 뷰 반환Business Layer - 비즈니스 로직Data Layer - persistence 로직 이런 계층들에 공통적으로 적용되는 부분들이 있다. 바로 보안, 성능측정, 로깅과 같은 부분들이다.각 계층에서 핵심적인 부분들은 아니지만 계층을 걸쳐 공통적으로 존재하여 공통관심사라고 불린다.이러한 공통 관심사를 관리해주기 위해 AOP(관점 지향 프로그래밍)이 등장하였다.  AOP가 동작하는 흐름은 크게 아래와 같다.공통 관심사항을 Aspect로 만든다.로깅, 보안,..
🌈 댓글 등록 성능테스트웹툰 도메인의 특징에는 웹툰이 게시되는 특정 시간대에 댓글 등록 요청 트래픽이 높아질 수 있다고 생각하였다.많은 요구사항을 처리하기 위해서는 댓글 등록 요청에 대한 응답시간을 줄이고, 최대한 많은 요청에 대해 커넥션이 연결되어야 한다.요구사항에는 댓글 등록 시 비속어가 검출되면 사용자 경고를 누적하는 기능이 포함 되어 있다. 비속어 검출 작업은 어떤 알고리즘 혹은 외부API를 사용하는지에 따라 시간이 오래 소요되는 작업이라고 생각하였고, 편의상 약 3초가 소요되도록 로직을 구성하였다.  테스트 도구는 빠르고 직관적으로 결과를 확인할 수 있도록 Locust를 활용하였고,아래 처럼 구성하여 간단하게 성능테스트를 진행하였다.테스트 조건100명의 사용자가 댓글 등록을 요청하는 상황진행시..
웹툰플랫폼을 주제 2명이서 프로젝트를 진행했다. 프로젝트를 진행함에 앞서서 목표가 중요할 것이라고 생각하기 때문에 간단히 정리하려고 한다. 먼저 기본적인 REST API 기반으로 백엔드 API개발을 목표로 진행하고, git형상관리를 통해서 이슈, PR, 코드리뷰까지 진행하였다. 추가적으로 나는 비동기 프로그래밍 학습까지 추가목표를 선정하였다. Spring에 비동기 프로그래밍을 적용하면서 부족했던 기초지식들을 쌓을 수 있을것이라고 생각하였다.  🌈 프로젝트 목표프로젝트 목표1. git 형상 관리 및 협업 경험2. 응답시간 향상을 위한 비동기 프로그래밍 학습3. 확장성을 고려한 설계 및 구현4. 단위테스트 및 통합테스트  🌈 프로젝트 목표 기간프로젝트 목표 기간2024.05.01 ~ 2024.05.15 ..
TLS(Transport Layer Security)는 두 엔드포인트 간에 통신을 암호화하는 데에 사용되는 기본적인 프로토콜이다. 암호화되지 않은 일반 데이터(IP패킷)를 그냥 전송하면 위험하기 때문에 암호화가 필요하다. 그런데 통신을 하는 사람들마다 암호화하는 방법이 모두 다르면 혼란이 오기 때문에 암호화 표준이 필요했고 이걸 위해 TLS가 생겨났다. 인터넷 통신에서 HTTPS 기반으로 굉장히 많은 통신이 이루어지고, 이때 사용되는 암호화방식이 TLS이므로 공부할 필요가 있을 것 같다. HTTP HTTP통신은 기본적으로 아래와 같이 이루어진다. 1. HTTP연결을 위해서 TCP연결을 수립한다.(HandShake) 2. 연결 후에 [GET / **] 형태의 데이터를 보내게 될텐데, MTU에 따라서 하나 ..
📌 프록시란? 자신의 요청을 대신 수행 해주는 서버를 말한다. 즉, 내가 google.com 서버로 요청을 보내면 실제로는 나의 요청은 프록시 서버가 대신해서 google.com 서버로 요청을 한다. 이러한 특징으로 인해서 실제 google.com 서버는 proxy.com 서버로부터 요청이 왔다고 생각하고, 실제로 어떤 클라이언트로부터 왔는지는 알지 못한다. 4계층 수준에서 보면 클라이언트에서 요청을 보낼 때, 클라이언트와 프록시서버가 TCP연결을 수립한다. 그리고 실제 GET/google.com 과 같은 데이터를 프록시서버에 전송하고, 프록시는 실제 google.com서버와 TCP연결을 수립하고 대신 요청한다. goocle.com서버 입장에서는 어떤 클라이언트로부터 요청이 왔는지 모르고, 단지 “나의 ..
· 취업준비
개발자 취준 기록 1일차 1. Call by reference란 무엇이고 보통 어떻게 쓰이나요? Call by reference는 메서드 인자로 전달되는 참조변수의 주소를 메서드 내부에 전달 해주는 방식입니다. 주로 호출자의 참조 변수를 직접 변경해야 하는 경우 Call by reference를 사용합니다. java의 경우 call by value 방식으로 동작하며, 객체의 경우 주소값 자체를 복사하여 전달하기 때문에 call by reference 동작처럼 보입니다. [추가 정리] 매개변수(parameter) : 함수 정의에 지정된 이름 인자(Argument) : 함수 호출에 제공 된 값 java는 call by value로 동작 → 원시값은 복사 → 객체는 힙메모리 주소 복사 2. Override 와..
· 끄적끄적
아침마다 네이버 공개채용 관련해서 네이버 검색창에 검색을 해보곤 하는데, 마침 오늘 검색을 했는데 2024 신입공채 화면이 뜨는 것이었다! 두둥.. 그런데 아직 실제 채용 공고 페이지는 올라오지 않아서 아직 구체적으로 계획된 건 아닌가? 잠깐 홍보 페이지만 올라온건가? 실수인걸까..?(설마..) 이런저런 생각을 해보면서 조금있다가 다시 한번 네이버 공개채용 검색을 해봤더니 갑자기 2024공개채용 홍보페이지가 사라졌다. 페이지가 생겼다가 없어졌다가 하는 것 같은데 문득 배포 하는 과정에서 다중 서버 환경에 내가 접속하면서 발생한 문제일까? 궁금해졌다. 별거 아닌거지만 먼가 실수로 올렸다가 내렸다가 하는건지(그럴리가..ㅋㅋㅋ) 아니면 배포과정에서 발생하는 현상인지 추후에 면접까지 가게된다면 간단히 여쭤보고 ..
Don't stop 훈
쉬지마 정지훈