본문 바로가기

728x90

백엔드

(84)
[Spring] AOP에 대해 알아보자 AOP란?AOP(Aspect Oriented Programming, 관점 지향 프로그래밍)는 비즈니스 로직과 공통 관심사(부가 기능)를 분리하여 관심사의 분리(Separation of Concerns)를 실현하는 프로그래밍 패러다임이다.즉, 하나의 로직에 대해 핵심적인 관점, 부가적인 관점으로 나눠서 본 다음 관점을 기준으로 각각 모듈화한다는 소리다.위 그림을 보면 이해가 갈 것이다.이처럼 관심사를 모듈화하고 이를 비즈니스 로직에서 분리해 재사용한다는것을 AOP라 한다.왜 AOP를 사용할까?Spring에서 SOP를 사용하는 이유는 공통 관심사를 비즈니스 로직에서 분리해 코드의 중복을 제거할 수 있기 때문이다.코드를 예시로 들어보겠다.Studnet, Teacher 클래에스에 아래와 같은 기능이 들어갈경우를..
[Spring] ComponentScan 어노테이션 들어가기 앞서Spring에서는 @ComponentScan 어노테이션을 비롯해 여러 특화 어노테이션을 사용해 자동으로 객체를 빈으로 등록하고 DI 구성을 자동화 할 수 있다.이번 글에서는 ComponentScan과 주요 어노테이션간의 관계에 대해 알아보도록 하겠다.컴포넌트 스캔이란?컴포넌트 스캔은 Spring이 자동으로 특정 패키지 이하의 클래스를 탐색해 @Component 계열의 어노테이션이 붙은 클래스를 Bean으로 등록하는 기능이다.@ComponentScan(basePackages = "com.example")위와 같이 사용하며 여기서 "com.example" 패키지 이하에서 @Component가 붙은 클래스를 찾아 자동으로 Bean으로 등록해준다.즉, 따로 @Bean으로 명시하지 않아도 객체가 자동..
[MongoDB] 몽고DB 설치 방법 몽고DB의 설치파일은 MongoDB에 들어가서 받으면 된다.자신에게 맞는 Platform(Windows, mac)을 선택해주고 다운로드 받는다.실행하면 이런 화면이 뜰텐데 Complete를 누르면 모든 필수 구성 요소를 설치해준다.Custom을 누르면 자신이 설치받을 것들을 선택할 수 있는데 이건 초보자에게는 권장하지 않는다.때문에 Complete를 클릭하여 완전 설치를 진행하면 되겠다.Install MongoD as a Service를 클릭하면 윈도우를 실행할때마다 자동으로 Service가 실행된다.만약 자신이 몽고DB를 사용하고 싶을때만 서비스를 실행시키고 싶다면 체크해제하면 된다.GUI 툴이 필요 없다면 체크해제해주면 된다.설치가 완료되었을 경우 윈도우 검색으로 서비스를 들어가면 서비스가 실행된게 ..
[Spring] Spring 의존성 주입(Config, 어노테이션, Groovy DSL, Bean 스코프) 들어가기 앞서Spring을 사용하면 자바에서 의존성 주입을 다양한 방식으로 할 수 있다.DI를 위한 Bean을 등록하기 위해서 xml을 사용할 수 있으며 이에 대한 자세한 내용은 블로그 글을 참고하면 된다.XML을 사용한 설정 말고도 Config를 사용해 순수 Java 코드로 설정이 가능하며, Groovy Bean DSL을 사용하는 방법도 존재하며 이에 대해 알아보도록 하자.또한, 등록된 빈들의 관계를 주입하는 어노테이션과 등록된 Bean의 범위(Scope)에 대해 알아보겠다.왜 Bean을 사용할까?Bean을 등록하고 객체에 주입하는데 사용하는데 Config와 같은 방식을 사용한다.그렇다면 왜 Bean을 사용하는지 알아야 한다.그 이유는 아래와 같다.1. 객체가 필요한 다른 객체를 자동으로 주입 받을 수..
[JAVA] 의존성 주입(DI)과 행동 패턴 들어가기 앞서객체를 설계할 때는 결합도와 역할 분리에 대해 고려해야 한다.왜냐하면, 추후 유지보수, 확장, 테스트 같은 소프트웨어 개발의 실질적인 품질과 연결되기 때문이다.결합도란 하나의 객체가 다른 객체에 얼마나 강하게 의존하고 있는가를 나타낸다.역할 분리란 객체가 한 가지 책임(역할)만 갖도록 설계하는 것이다.직접 객체를 생성하는 강한 결합의 경우class Keyboard { public void type() { System.out.println("키보드를 입력합니다."); }}class Monitor { public void display() { System.out.println("화면에 표시합니다."); }}public class ComputerMai..
[디자인패턴] GoF 디자인패턴 디자인 패턴이란?웹 개발자라면 디자인 패턴이라는 단어를 한번쯤은 들어봤을것이다.디자인 패턴은 객체 지향 프로그래밍 설계를 할 때 자주 발생하는 문제들을 해결하기 위해 사용되는 패턴이다.코드를 작성하다보면 발생하는 문제를 해결하기 위해 앞선 개발자들이 이것저것 시도해보고 그 결과 가장 효과적인 방법들을 패턴 이라는 이름으로 자리를 잡았다고 생각하면 된다.왜 써야할까?앞서 이야기했듯 대다수의 문제들은 이미 개발자들이 시도하고 검증된 패턴들이 존재한다.이를 객체 지향 디자인 원칙을 사용해 어떻게 문제를 해결했는지 학습할 수 있다.또한, 팀 단위로 작업을 하게 될 경우 디자인 패턴에 대해 알고 있다면 "~ 패턴으로 구현해주세요"와 같은 공통적인 언어로 소통이 쉽고 간편하게 할 수 있다.GoF 디자인 패턴이란?G..
[JAVA] lombok이 적용이 안될때 해결 방법 평소에 이클립스는 순수 Java 코드를 작업하는데 사용하고, STS는 웹 작업을 하기 위해서 사용한다.하지만 STS에서 Lombok을 사용하려고 하니 이상하게 적용이 안되서 다른 사람들도 같은 상황을 겪을때 도움이 되었으면 하는 마음에 해결 방안을 기록한다.lombok.jar 파일을 실행하면 아래와 같이 설치 경로가 잡히게 된다.하지만, 분면 STS와 이클립스 2개를 사용하고 있는데 롬복에서는 이클립스의 경로만 잡힌다.이 경우에는 Specity location... 버튼을 클릭해서 수동으로 STS 경로를 잡아줘야 한다.설치해둔 STS 경로로 이동하면 SpringToolSuite4.exe가 존재한다.위 exe 파일을 경로로 잡아주면 아래 이미지처럼 STS도 정상적으로 설치 경로가 잡히게 된다.그럼 이제 실..
[JAVA] Executor 및 VirtualThread를 사용한 작업 처리 병렬화 들어가기 앞서Java에서 여러 작업을 동시에 사용하는 멀티스레드의 경우 보통 Thread, Executor, ThreadPool을 주로 사용하곤 한다.Java21에 등장한 가상 스레드를 사용하면 기존 플랫폼 스레드보다 가볍게 대규모 동시 처리가 가능해졌다.이에 대한 자세한 내용은 블로그글에 정리해뒀다.이 글에서는 Java에서 제공하는 Executor 프레임워크와 Virtual Thread를 함께 활용하여, 확장성과 효율성을 동시에 만족시키는 병렬 처리 구조를 어떻게 구현할 수 있는지 설명한다.병렬 처리란?병렬 처리(Parallel Processing)란, 여러 작업을 동시에 여러 스레드에서 실행하는 구조를 뜻한다.반대되는 말로는 직렬 처리(Serial Processing)가 있으며, 하나의 작업을 끝날 ..

728x90