목록2024/11 (13)
HJW's IT Blog
스프링 컨테이너 생성 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); ApplicationContext 를 Spring Container 라 한다. BeanFactory 도 있지만, 거의 사용하지 않는다.Spring Container는 XML 을 기반으로 만들 수 있고, 어노테이션 기반의 자바 설정 클래스로 만들 수 있다.AnnotationConfigApplicationContext 는 ApplicationContext interface 의 구현체이다.생성 과정1.Spring Container 생성 이 상태는 구성 정보가 지정되어 있지 않는 컨테이너가 생성된다. 이를 활용하기 위..
스프링 생태계Spring 은 어떤 특정한 하나가 아닌 여러 기술들의 모음이다.Spring Framework핵심 기술 : Spring DI Container, AOP, Event, 기타 등등Web 기술 : Spring MVC, Spring WebFlux데이터 접근 : transaction, JDBC, ORM기술 통합 : Cache, Email, 원격, 스캐줄링Test : 스프링 기반 testSpring BootSpring 을 편하게 사용할 수 있도록 지원단독 실행 가능한 Spring Application 생성Tomcat 과 같은 웹 서버 재장손쉬운 build 를 위한 starter 종속성 제공Spring 과 3rd party 라이브러리 자동 구성메트릭, 상태 확인, 외부 구성 같은 프로덕션 준비 기능 제공..
AOP란 무엇인가?AOP(Aspect Oriented Programming) 은 관점 지향 프로그래밍이다. 쉽게 말해, 어플리케이션의 핵심 비즈니스 로직에서 부가적인 기능을 분리하여 모듈화하는 패러다임이다. 각 기능을 모듈화 함으로써 공통 모듈을 분리하여 코드의 가독성과 유지 보수성을 향상 시키는데에 목적이 있다. OOP랑 뭐가 다를까?OOP(Object Oriented Programming) 의 경우, 클래스를 중심으로 모듈화를 하는 반면, AOP 는 관점에 집중한다. 여기서 관점이란 **여러 객체와 모듈에서 공통적으로 나타나는 Cross-Cutting Concern 을 의미한다. AOP vs OOP모듈화의 기준OOP : 객체와 클래스 중심의 모듈화가 이루어 진다.AOP : 어플리케이션 전반에 걸쳐 발..
Component Scan과 자동 의존관계 설정Spring은 기본적으로 @ComponentScan을 통해 특정 패키지와 그 하위 패키지를 스캔하여 @Component가 붙은 클래스를 Bean으로 등록한다.@SpringBootApplication에 이미 @ComponentScan이 포함되어 있어, 별도의 설정 없이도 이러한 동작이 가능하다.Spring Bean 등록 예시@Controllerpublic class MemberController {}위와 같이 선언하면, Spring Container가 생성된 후 MemberController 객체를 생성하여 Spring이 관리하게 된다.의존성 주입 예시MemberService를 사용하려면 해당 의존성을 Spring Container에 등록하고, 주입받아야 한다..
HTML? Controller?hello-static.html 이라는 요청이 들어오면, 우선 hello-static 관련 컨트롤러가 있는지 찾아본다. Mapping 된 컨트롤러가 없을 경우, Sprin 은 /static 폴더 내에서 정적 컨텐츠를 찾아 반환한다.@Controllerpublic class HelloController { @GetMapping("hello") public String hello(Model model) { model.addAttribute("data", "hello!!"); return "hello"; }}안녕하세요. 손님 위와 같은 controller 와 html 이 있을 경우, 요청이 들어올 시, controller mapping 을 통해 해당 메서드가 있는것을 확인한다...
IoC 란?Inversion of Control(제어의 역전) 은 SW 엔지니어링에서 사용되는 원칙으로, 객체 혹은 프로그램의 일부에 대한 제어권을 컨테이너로 이전하는 개념이다. 전통적인 프로그래밍의 경우, 개발자가 작성한 코드가 라이브러리를 호출하는 구조이다. 하지만 IoC 를 사용할 경우, 프레임워크가 개발자의 코드를 호출하도록 한다. 우리는 왜 IoC 를 사용하는지에 집중해야 한다. IoC를 통한 장점은 다음과 같다.작업 실행과 구현의 분리 : 특정 작업을 수행하는 로직과, 해당 작업을 구현하는 방식을 분리할 수 있다.구현 간 전환의 용이성 : 서로 다른 구현체간 전환이 쉽다프로그램의 모듈화 향상 : 각 구성 요소가 독립적으로 모듈화 된다.테스트 용이성 증가 DI 란?Dependency Inject..
문제 분석이 문제는 크기가 N x M 인 지도 위에서 주사위를 굴리는 시뮬레이션 문제이다. 주사위 이동에 대한 명령이 주어지며, 이동한 칸의 값에 따라 주사위와 지도의 값을 교환한다.문제 요구사항주사위는 주어진 명령에 따라 이동한다1 : 동2 : 서3 : 북4 : 남주사위가 지도 바깥으로 나가는 명령을 받는 경우 무시한다주사위가 이동했을때, 지도의 값이 0 이라면, 주사위의 바닥면을 복사한다주사위가 이동했을때, 지도의 값이 0 이 아니라면, 칸의 값을 주사위의 바닥에 복사하고, 칸은 0이 된다.코드 설계Dice 클래스Dice 는 6가지 면의 상태를 기록해 두는 클래스로, second : 윗면, fourth : 아랫면 을 기준으로 first : 북쪽을 바라보는 면, third : 남쪽을 바라보는면, lef..
Github Action필요 프레임워크가 설치되어 있는 ubuntu 서버를 받아와, 내부에서 npm run, npm run build 를 통해 성공 실패 여부를 판단한다.이때 하나라도 실패시 → 개발자가 오류를 파악, 코드 업데이트성공시 → merge pull request → deploy.github 폴더 생성workflows 폴더 생성{name}.yml 파일 생성name: teston: pull_requestjobs: test: runs-on: ubuntu-22.04 steps: - name: Checkout repository uses: actions/checkout@v3 - name: Node.js setup uses: actions/set..
Servlet서블릿이란, JAVA를 기반으로 하는 웹 프로그래밍 기술 중 하나로, Dynamic Web Page 를 만들 때 사용되는 자바 기반의 웹 어플리케이션 프로그래밍 기술이다.웹상에는 다양한 req 와 res 가 있는데, 이러한 요청과 응답을 일일이 처리하게 되면 많은 시간과 노력이 소요 된다. 이때 서블릿이 사용된다. 서블릿이란 복잡한 요청과 응답을 간단한 메서드 호출 만으로 체계적으로 다룰 수 있도록 해주는 기술이다.개발자가 소스를 작성하게 되면, 컴파일 되어 서블릿 컨테이너에 등록되고, 클라이언트와 소통할 때 컨테이너에 등록된 서블릿을사용하게 된다. 즉, 클라이언트는 서블릿 컨테이너에 요청을 보내고, 서블릿 컨테이너가 처리한 후, HTTP 형식으로 응답을 하는 것이다.서블릿 컨테이너위에서 요..
문제 이해와 풀이 전략문제 규칙 요약상어는 1칸당 1초의 시간이 소요된다.자신의 크기보다 큰 물고기가 있는 칸은 이동할 수 없다.크기가 같은 물고기는 지나갈 수 있으나 먹지는 못한다.상어가 크기만큼의 물고기를 먹으면 크기가 1 증가한다.먹을 수 있는 물고기가 없으면 종료된다.먹을 수 있는 물고기가 여러 마리일 경우:가장 가까운 물고기위쪽에 위치한 물고기왼쪽에 위치한 물고기 순으로 먹는다.물고기를 먹으면 해당 칸은 빈칸이 된다.풀이 전략BFS를 통해 현재 상어가 도달할 수 있는 모든 칸을 탐색하며 먹을 수 있는 물고기를 리스트에 추가한다.먹을 수 있는 물고기 리스트를 문제 조건에 맞게 정렬한다.가장 가까운 물고기를 먹고, 상어의 위치를 갱신하며 크기를 체크한다.더 이상 먹을 수 있는 물고기가 없으면 종료한..