인프런 80

[JPA] TIL 4일차 - JPA 시작하기, 동작 방식

JPA 시작하기 JPA 구동 방식 Persistence.xml 설정 정보를 읽어서 EntityManagerFactory라는 클래스를 만든다. 여기서 필요할 때마다 EntityManager를 사용한다. EntityManagerFactory는 하나만 생성해서 애플리케이션 전체에서 공유해야 한다. 앤티티매니저는 쓰레드 간에 공유하면 안된다. JPA의 모든 데이터 변경은 트랜잭션 안에서 실행해야 한다. 회원 저장 EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); // 데이터베이스 연결 // 애플리케이션 로딩 시점에 딱 하나만 만들어야 한다. EntityManager em = emf.createEntityManager(); //..

BACK/JPA 2024.03.31

[Spring] 스프링 MVC1- 웹 애플리케이션 이해(WAS, 서블릿, 쓰레드)

현재 거의 모든 형태의 데이터를 HTTP 로 전송한다. Web Server HTTP 기반으로 동작 정적 리소스(html, css , js, img..)제공, 기타 부가 기능 ex) nginx, apache Web Application Server(WAS) HTTP 기반으로 동작 프로그램 코드를 실행해 애플리케이션 로직 수행 ⇒ HTTP 요청이 오면 사용자에 따라서 다른 화면을 보여줄 수 있음 정적 리소스도 제공 가능 동적 html, http api(json) 생성 가능 서블릿, jsp, 스프링 mvc가 WAS 에서 동작 ex) tomcat, jetty WAS는 애플리케이션 코드를 실행하는데 더 특화되어 있다. 💡 Web Server: 정적 리소스 제공하는 서버 WAS: 애플리케이션 로직을 실행하는 서버 ..

BACK/SPRING 2024.03.04

[Spring] 스프링 핵심 원리 - 빈 스코프

스코프: 빈이 존재할 수 있는 범위 싱글톤: 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프 프로토타입: 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입(초기화 메서드까지) 까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프 클라이언트에게 빈을 반환하고, 스프링 컨테이너는 이후에 빈을 관리하지 않음(이후에는 클라이언트가 관리) 컨테이너에 요청할 때마다 새로 생성 스프링 컨테이너에서 빈을 조회할 때 생성되고, 초기화 메서드도 실행 종료 메서드가 호출되지 않음 (클라이언트가 직접 해야함) 프로토 타입 스코프, 싱글톤 빈 함께 사용 시 문제점 public class SingletonWithPrototypeTest1 { @Test void prototypeFin..

BACK/SPRING 2024.03.04

[Spring] 스프링 핵심 원리 - 빈 생명주기 콜백

스프링 빈의 이벤트 라이프 사이클 스프링 컨테이너 생성 → 스프링 빈 생성 → 의존 관계 주입 → 초기화 콜백 → 사용 → 소멸전 콜백 → 스프링 종료 스프링은 의존 관계 주입이 완료되면 스프링 빈에게 콜백 메서드를 통해 초기화 시점을 알려줌스프링은 스프링 컨테이너가 종료되기 직전에 소멸 콜백을 줌 💡 객체의 생성과 초기화(무거운 동작)를 분리하자  빈 생명주기 콜백 지원 3가지 인터페이스(InitializingBean, DisposableBean) InitializingBean 은 afterPropertiesSet() 메서드로 초기화를 지원한다.DisposableBean 은 destroy() 메서드로 소멸을 지원한다.잘 사용 X  설정 정보에 초기화 메서드, 소멸 메서드 지정설정 정보에 @Bean(i..

BACK/SPRING 2024.03.04

[JAVA] 알고리즘 : 그리디- 원더랜드 (크루스칼, 프림)

크루스칼 import java.util.ArrayList; import java.util.Collections; import java.util.Scanner; class Edge implements Comparable{ public int v1; // 정점 1 public int v2; // 정점 2 public int cost; // 두 정점을 연결하는 비용 Edge(int v1, int v2, int cost){ this.v1 = v1; this.v2 = v2; this.cost = cost; } @Override public int compareTo(Edge ob){ return this.cost - ob.cost; // cost 오름차순 정렬 } } class Main{ static int[] u..

ALGORITHM 2022.11.25

[JAVA] 알고리즘 : 그리디- 친구인가? (Disjoint-Set : Union&Find)

import java.util.Scanner; class Main{ static int[] unf; public static int Find(int v){ // v번 학생의 집합 번호를 리턴 if(v==unf[v]) return v; else return unf[v] = Find(unf[v]); } public static void Union(int a, int b){ int fa = Find(a); int fb = Find(b); if(fa!=fb) unf[fa] = fb; } public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int m = sc.nextInt(); unf =..

ALGORITHM 2022.11.25

[JAVA] 알고리즘 : 그리디- 다익스트라 알고리즘

import java.lang.reflect.Array; import java.util.ArrayList; import java.util.Arrays; import java.util.PriorityQueue; import java.util.Scanner; class Edge implements Comparable{ public int vex; // 정점 public int cost; // 가중치 비용 Edge(int vex, int cost){ this.vex = vex; this.cost = cost; } @Override public int compareTo(Edge ob){ return this.cost - ob.cost; // 가중치 오름차순 // Edge 형의 priority queue를 만들면..

ALGORITHM 2022.11.25

[JAVA] 알고리즘 : 동적 계획법- 최대 점수 구하기(냅색 알고리즘)

import java.util.Scanner; public class Main{ public static void main(String[] args) { Scanner kb = new Scanner(System.in); int n = kb.nextInt(); // 문제의 개수 int m = kb.nextInt(); // 주어진 시간 int[] dp = new int[m+1]; // dp[i] = i분 동안 풀 수 있는 최대 점수 for(int i=0; i=time; j--){ dp[j] = Math.max(dp[j], dp[j-time]+score); // 최대 점수 갱신 } } System.out.println(dp[m]); // m분 동안의 최대 점수 } } 이 전 동전 교환 문제와 비슷하지만 썼던 ..

ALGORITHM 2022.11.09