전체 글 56

[Spring] 스프링 빈(Spring Bean)과 빈 스코프(Bean Scope)

김영한님의 '스프링 핵심원리 - 기본편' 강의를 들으면서 스프링 빈과 빈 스코프에 대하여 다시 한번 복습 한 뒤 개념을 정리하고자 한다. 스프링 빈이란? Spring Bean은 애플리케이션의 핵심을 이루는 Java 객체로서 스프링 IoC(Inversion of Control) Container에 의해 인스턴스화, 관리, 생성된다. - Beans는 우리가 컨테이너에 공급하는 설정 메타 데이터(XML 파일)에 의해 생성된다. - Spirng IoC Container가 이 메타 데이터를 통해 Bean의 생성, Bean Life Cycle, Bean Dependency 등을 알 수 있다. - 애플리케이션의 객체가 지정되면, 해당 객체는 getBean("beanName") 메서드를 통해 가져올 수 있다. 빈 스코..

Spring 2022.04.25

[Spring] MVC(Model - View - Controller) 패턴

김영한님의 '스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술' 강의를 들으면서 MVC 패턴에 대해 복습 할 필요가 있을 것 같아서 MVC 패턴의 개념, 스프링에서 MVC 패턴의 동작 원리 등을 정리해보려고 한다. MVC 패턴이란? 모델-뷰-컨트롤러(model–view–controller, MVC)는 소프트웨어 공학에서 사용되는 소프트웨어 디자인 패턴이다. 이 패턴을 성공적으로 사용하면, 사용자 인터페이스로부터 비즈니스 로직을 분리하여 애플리케이션의 시각적 요소나 그 이면에서 실행되는 비즈니스 로직을 서로 영향 없이 쉽게 고칠 수 있는 애플리케이션을 만들 수 있다. MVC 패턴의 구성요소 컨트롤러 : HTTP 요청을 받아서 파라미터를 검증하고, 비즈니스 로직을 실행한다. 그리고 뷰에 전달할 결과 데이터를..

Spring 2022.04.24

[Spring] 서블릿과 서블릿 컨테이너

김영한님의 '스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술' 강의를 들으면서 서블릿과 서블릿 컨테이너에 대한 개념을 정리해보며 HttpServletRequest와 HttpServletResponse에 대하여 정리해보려고 한다 서블릿(Servlet)이란? 자바 서블릿(Java Servlet)은 자바를 사용하여 웹페이지를 동적으로 생성하는 서버측 프로그램 혹은 그 사양을 말하며, 흔히 "서블릿"이라 불린다 자바 서블릿은 웹 서버의 성능을향상하기 위해 사용되는 자바 클래스의 일종이다. 서블릿은 JSP와 비슷한 점이 있지만, JSP가 HTML 문서 안에 Java 코드를 포함하고 있는 반면, 서블릿은 자바 코드 안에 HTML을 포함하고 있다는 차이점이 있다 서블릿 컨테이너란? 서블릿 컨테이너는 서블릿 객체를 ..

Spring 2022.04.07

[알고리즘] 벨만-포드 알고리즘(Bellman-Ford Algorithm)

최단 거리 알고리즘을 구할 때 주로 다익스트라(Dijkstra) 알고리즘을 활용하여 구하곤 한다. 최단 거리 알고리즘 중에서 시간 복잡도O(ElogV)가 빠르기 때문이다. 그러나 음수 가중치의 간선이 있을 경우 가중치의 합이 음수인 사이클이 생길 수 있으며 이 때 최단 경로가 음의 무한대로 발산하게 되면서 다익스트라 알고리즘을 사용할 수 없게 된다. 이 문제를 해결하기 위해 시간복잡도O(|V||E|)는 더 오래 걸리지만 다익스트라 알고리즘의 한계를 극복할 수 있는 벨만-포드 알고리즘을 사용할 수 있다. 벨만-포드 알고리즘는 '모든 경우의 수를 다 탐색해가며 최소비용을 찾는다' 라는 원리를 가지고 있다 다음과 같은 과정을 통해 벨만-포드 알고리즘을 적용할 수 있다 1. 출발 노드를 설정한다 2. 최단 거리..

알고리즘 2022.03.10

[Spring] 싱글톤(Singleton) 패턴

김영한님의 '스프링 핵심원리 - 기본편' 강의를 들으면서 싱글톤을 설명하시면서 구현 방법에 대해 조사해보라고 말씀해주셨던 부분이 생각나서 싱글톤의 개념과 장,단점 그리고 6가지의 구현방법에 대해 정리해보고자 한다. 싱글톤 패턴이란? GoF 패턴의 생성 패턴 중 하나의 패턴으로서 생성자가 여러 차례 호출되더라도 실제로 객체는 하나만 생성 되도록 하며 생성된 객체를 어디에서든지 참조할 수 있도록 하는 패턴 최초 생성 이후 호출된 생성자는 최초의 생성한 객체를 리턴 하도록 설계하는 것 싱글톤 패턴의 장점 싱글톤으로 만들어진 클래스는 전역이기 때문에 다른 클래스의 인스턴스들의 데이터 공유가 쉽다 인스턴스가 절대적으로 한 개만 존재함을 보증하며 개발 시 실수를 줄일 수 있다 싱글톤 객체를 사용하지 않는 경우 인스..

Spring 2022.03.07

[백준 17070] 파이프 옮기기 1 (C++)

문제 https://www.acmicpc.net/problem/17070 17070번: 파이프 옮기기 1 유현이가 새 집으로 이사했다. 새 집의 크기는 N×N의 격자판으로 나타낼 수 있고, 1×1크기의 정사각형 칸으로 나누어져 있다. 각각의 칸은 (r, c)로 나타낼 수 있다. 여기서 r은 행의 번호, c는 열의 www.acmicpc.net 난이도 2 / 5 풀이 파이프는 놓아져있는 방향에 따라 이동할 수 있는 방법이 다르다 (가로, 세로, 대각선) 점화식을 통해 3가지의 모양에 따라 (N,N) 까지 갈 수 있는 경우의 수를 구한 뒤 더해준다. 이 때 주의해야할 점은 대각선으로 이동할 때 (i,j)와 (i+1,j+1) 뿐만 아니라 (i+1,j) (i,j+1)에도 벽이 있는 지 확인해줘야 한다. 또한 맨처..

백준 2022.02.23

[Spring] 의존성 주입(Dependency Injection, DI)이란?

김영한님의 '스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술' 강의를 들으면서 Dependency Injection에 대해 강조하시고 반복적으로 언급을 하시는 것을 확인할 수 있었다. 처음으로 스프링을 공부하면서 Dependency Injection이 정확하게 어떤 것인지 궁금해져서 이것에 대해 정리를 해보려고 한다. 1. 의존성 주입의 사전적 의미 소프트웨어 엔지니어링에서 의존성 주입(dependency injection)은 하나의 객체가 다른 객체의 의존성을 제공하는 테크닉이다. "의존성"은 예를 들어 서비스로 사용할 수 있는 객체이다. 클라이언트가 어떤 서비스를 사용할 것인지 지정하는 대신, 클라이언트에게 무슨 서비스를 사용할 것인지를 말해주는 것이다. "주입"은 의존성(서..

Spring 2022.02.21

[백준 1043] 거짓말 (C++)

문제 https://www.acmicpc.net/problem/1043 1043번: 거짓말 지민이는 파티에 가서 이야기 하는 것을 좋아한다. 파티에 갈 때마다, 지민이는 지민이가 가장 좋아하는 이야기를 한다. 지민이는 그 이야기를 말할 때, 있는 그대로 진실로 말하거나 엄청나게 www.acmicpc.net 난이도 GOLD 4 풀이 간단하게 풀릴 줄 알았는데 생각보다 오래 걸린 문제 진실을 모르는 사람과 알고 있는 사람이 함께 있을 때만 과장하지 않으면 될 줄 알고 bool 배열을 활용해서 풀었다가 다음과 같은 반례를 얻을 수 있었다. 6 5 1 6 2 4 5 2 1 2 2 2 3 2 3 4 2 5 6 6번이 진실을 알기 때문에 맨 마지막 케이스에서 진실을 말해야 하고 따라서 5번이 속해있는 파티에서도 진..

백준 2021.12.30

[백준 2252] 줄 세우기 (C++)

문제 https://www.acmicpc.net/problem/2252 2252번: 줄 세우기 첫째 줄에 N(1 ≤ N ≤ 32,000), M(1 ≤ M ≤ 100,000)이 주어진다. M은 키를 비교한 회수이다. 다음 M개의 줄에는 키를 비교한 두 학생의 번호 A, B가 주어진다. 이는 학생 A가 학생 B의 앞에 서야 한다는 의 www.acmicpc.net 난이도 3 / 5 풀이 위상정렬(topological sorting)을 활용한 문제이다. 위상정렬의 조건을 만족하기 위해서는 Cycle이 발생하지 않아야 하며 방향 그래프여야 한다. 어떤 정점으로 들어오는 즉 a -> b 관계에서 a가 b보다 선행되어야 한다는 것을 indegree라는 배열을 활용하여 표시한다. 먼저 indegree가 0인 정점을 q..

백준 2021.12.24

[백준 11055] 가장 큰 증가 부분 수열 (C++)

문제 https://www.acmicpc.net/problem/11055 11055번: 가장 큰 증가 부분 수열 수열 A가 주어졌을 때, 그 수열의 증가 부분 수열 중에서 합이 가장 큰 것을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {1, 100, 2, 50, 60, 3, 5, 6, 7, 8} 인 경우에 합이 가장 큰 증가 부분 수 www.acmicpc.net 난이도 2 / 5 풀이 DP 기초 문제 풀다가 점화식을 세우는데 고생했던 문제 처음 문제를 풀 때 맨 앞의 숫자부터 브루트 포스로 본인보다 큰 수가 나오면 그 숫자를 더한 뒤 저장하고 다음 숫자를 비교하는 방식으로 최대값을 구했더니 다음과 같은 반례가 존재하였다 1 4 2 3 1 2 3이 가장 큰 증가 수열의 합인데 위의 방법을 적용..

백준 2021.12.07