본문 바로가기

개인 공부185

[Spring] Spring의 DB 접근 기술 ✍️ 학습 목표 JDBC Spring JdbcTemplate JPA Spring Data JPA 📌 JDBC JDBC란? Java Database Connectiviy의 약자로 Java 환경에서 DB에 접근하기 위한 표준 API이다. 스프링과 독립적이며 DBMS의 종류와 상관없이 하나의 JDBC API를 이용해서 데이터베이스 작업을 처리한다. ✔️ 등장 배경 및 특징 JDBC 이전에는 데이터베이스 종류에 따라 다른 SQL문을 사용해야 했다. JDBC가 등장하면서 데이터베이스마다 다른 메서드나 전역 변수 등을 통일하는 문법을 만들어 사용할 수 있게 해주었다. 코드가 길고 쿼리문을 직접 작성해야 하는 번거로움이 있으며 예외 처리를 위한 복잡한 try-catch 문을 사용해서 현재는 많이 사용하지 않는다. 📌.. 2022. 8. 23.
[Spring] Spring의 핵심 : IoC, DI (23.05.16 updated) ✍️ 학습 목표 IoC DI 📌 IoC (Inversion of Control) IoC란? Inversion of Control의 약자로 단어 그대로 해석하면 '제어의 역전'이라는 뜻이다. 이전에는 프로그램의 흐름을 개발자가 주도했지만 스프링에서는 이 흐름이 달라진다. 메소드나 객체의 호출을 개발자가 아닌 스프링 컨테이너에서 담당한다. 스프링 컨테이너는 IoC 컨테이너라고도 불린다. ✔️ IoC 컨테이너 IoC 컨테이너란? 객체를 생성, 관리 그리고 의존성을 관리해주는 컨테이너이다. IoC 컨테이너가 관리하는 객체를 Bean이라고 하는데, Bean을 저장해서 BeanFactory라고도 불린다. BeanFactory는 하나의 인터페이스이다. 의존 관계 외에 다양한 기능을 제공하는데 이 BeanFactory.. 2022. 8. 23.
[Spring] Spring vs Spring Boot (2) ✍️ 학습 목표 스프링이란? 스프링 부트란? 차이점 📌 스프링 부트란? 스프링의 등장만으로 큰 변화를 가져왔지만 개발자들은 여전히 불편한 점이 있었는데 바로 복잡한 환경 설정이다. 다양한 라이브러리와 기술을 지원하면서 덩달아 개발자가 처리해야 하는 설정도 많아지고 복잡해진 것이다. 스프링 부트는 이 문제를 해결하고자 등장했다. 다음 항목들은 내가 생각하는 가장 중요한 기능이자 스프링과의 차이점이라고 생각한다. Auto Configuration Easy Dependency Management Embedded Server 이 3가지 기능들 외에도 라이브러리 버전 자동 관리, 인메모리 데이터베이스(H2), 테스트 환경 제공 등 스프링에는 없던 다양한 기능들을 추가함으로 더 편한 개발 환경을 제공한다. 즉, 최.. 2022. 8. 23.
[Python] 백준 1647번 : 도시 분할 계획 https://www.acmicpc.net/problem/1647 1647번: 도시 분할 계획 첫째 줄에 집의 개수 N, 길의 개수 M이 주어진다. N은 2이상 100,000이하인 정수이고, M은 1이상 1,000,000이하인 정수이다. 그 다음 줄부터 M줄에 걸쳐 길의 정보가 A B C 세 개의 정수로 주어지는데 A번 www.acmicpc.net 💡 문제 풀이 최소 신장 트리(MST) 문제이다. 크루스칼 알고리즘을 통해서 해결했다. 문제 자체는 알고리즘을 이해하고 있으면 어렵지 않으나, 도시를 분리해야 해야 하므로 마지막에 추가된 비용을 빼줘야 한다. ✔️ 느낀 점 솔직히 마지막에 왜 빼줘야 하는지 이해를 할 수 없다. 크루스칼 알고리즘 자체를 이해하는 것이 목표라서 그냥 이해하지 않고 넘어갔다. 💻 .. 2022. 8. 21.
TIL : Kruskal(크루스칼) 알고리즘 (9) 💻 알고리즘 📌 크루스칼 알고리즘 프림 알고리즘과 같이 대표적인 최소 신장 트리(MST)를 찾는 알고리즘이다. 이 알고리즘의 특징과 동작 원리는 다음과 같다. ✔️ 특징 확인하는 그래프가 무방향 그래프이고 가중치가 존재한다. 가장 비용이 작은 것부터 확인하기 때문에 그리디 알고리즘의 일종이다. 순환(Cycle)이 있는지 확인하기 위해서 Union-Find 알고리즘을 사용한다. ✔️ 동작 원리 입력받은 간선들을 cost을 기준으로 정렬한다. 가장 작은 비용을 가진 간선을 확인한다. 사이클이 안 만들어지면 추가하고 만들어지면 다음 간선을 확인한다. 간선의 개수가 정점 - 1 개가 될 때까지 반복한다. # find function def find(x): if x != parent[x]: parent[x] = .. 2022. 8. 21.
[Python] 백준 6497번 : 전력난 https://www.acmicpc.net/problem/6497 6497번: 전력난 성진이는 한 도시의 시장인데 거지라서 전력난에 끙끙댄다. 그래서 모든 길마다 원래 켜져 있던 가로등 중 일부를 소등하기로 하였다. 길의 가로등을 켜 두면 하루에 길의 미터 수만큼 돈이 들 www.acmicpc.net 💡 문제 풀이 최소 신장 트리 (MST)에 관한 문제이다. 크루스칼 알고리즘을 이용해서 해결했다. 잘 읽어봐야하는 점은 문제에서 출력해야 하는 값은 최소 신장 트리의 비용이 아닌, 가로등의 불을 끔으로써 아낀 비용을 출력해야한다. ✔️ 느낀 점 문제가 요구하는 점을 제대로 안 읽어서 틀렸을 때 너무나도 당황했다. 💻 코드 import sys input = sys.stdin.readline def find(x.. 2022. 8. 21.