목록분류 전체보기 (229)
DevKim
올해 초에 이 문제를 푼 적이 있었는데, 이번에 다시 풀 기회가 생겨 다시 한번 풀어보았다. 01.이전에 푼 방법 --> O(N) 72ms https://yeon-woo-kim.tistory.com/83 [Python] 백준 #1158 요세푸스 문제 www.acmicpc.net/problem/1158 1158번: 요세푸스 문제 첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000) www.acmicpc.net 이거 다음 요세푸스2가 정말 문제다.. 시간초과 때문에.. yeon-woo-kim.tistory.com 02. 새로 푼 방법 --> O(N) 3996ms [ 자료구조 ] 큐 [ 접근 방법 ] que를 하나 만들어, k 전까지 pop을 해서 que의 뒤에 추..
[ 엔티티의 생명주기 ] 1. 비영속 (new/transient) - 비영속은 말 그대로, 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태이다. = 그냥 객체만 생성했을 때 - JPA와 관계 X 2. 영속 (managed) - 영속 상태가 되어 관리되어지는 상태를 이야기한다. em.persist( ) 3. 준영속 (detached) - 영속 상태였던 애를 , 영속성 컨텍스트에서 분리한 상태 => 분리한 후에 commit을 해도 update 쿼리가 나가지 않는다. em.detach( ) ****************************** 참고 ******************************** 준영속 상태로 만드는 방법은 직접 쓸 일은 없고 원리만 이해하면 된다! 1> 특정 엔티티만 준영속 상태..
[ Entity Manager & Factory ] 영속성 컨텍스트에 들어가기 전에, 엔티티 매니저 팩토리와 엔티티 매니저 동작과정을 간단하게 정리해보자 1.고객의 요청이 올때마다 팩토리가 EntityManager을 생성하고 2. EntityManager은 내부적으로 데이터 connection을 사용해서 DB를 사용하게된다. [ 영속성 컨텍스트란? ] "엔티티를 영구 저장하는 환경"이라는 뜻이다. -> DB에 저장하는게 아니라, entity를 영속성 context에 저장한다는 뜻 -> EntityManager.persist(entity); 영속성 컨텍스트는 논리적인 개념이기에 당연히 눈에 보이지 않는다. 엔티티매니저를 통해 영속성 컨텍스트에 접근한다. 풀어서 이해해보면, 엔티티 매니저가 생성될 때 그 안..
1. 실무에서는 가급적 Getter은 열어두고, Setter은 닫아주자 - 실무에선 엔티티를 조회 할 일이 너무 많으므로, Getter의 경우엔 열어두는 것이 좋다. 단, Setter를 막 열어두면 나중에는 엔티티가 도대체 어디서 왜 변경되는지 추적하기가 힘들어진다. 그래서 엔티티를 변경할 때는 Setter 대신에 변경 지점이 명확하도록 변경을 위한 비즈니스 메서드를 별도로 제공해야한다. (유지 보수성이 올라감) 2. 실무에서 @ManyToMany는 '절대' 사용하지 말자. - 편리한 것 같지만, 중간 테이블에 컬럼을 추가할 수 없고, 세밀하게 쿼리를 실행하기 어렵기 때문에 실무에서 사용하기에는 한계가 있다. 일대다,다대일 매핑으로 풀어내서 사용하자 3. FK가 있는 곳을 연관관계의 주인으로 정해라 4...
Test code를 돌려 테스트를 해보던 중, 하나에서만 'JUnit Vintage'라는 오류가 발생했다. [ 해결 방법1 ] - 오류가 나는 해당 클래스의 public을 지워줬다. [ 해결 방법2 ] Test가 이렇게 import 되어있다면, import org.junit.Test; 으로 변경해주면 된다. 생했다
[01] 회원 엔티티 생성 [02] 회원 리포지토리 @PersisenceContext : Entity manager 주입 *** save 메소드에서 member를 반환하지 않고, 귀찮지만 id를 반환하는 이유 *** "command와 query를 분리하라" 원칙에 의해.. 이건 side effect를 일으키는 command성이기 때문에, return 값은 거의 만들지 않는 것이 좋다. 대신에 id 정도 있으면 다음에 다시 조회할 수 있으니까, 이렇게 id정도만 조회하는 것으로 영한님은 주로 설계하신다고 한다. CQRS 명령 - 질의 책임분리 CQRS는 Command and Query Responsibility Segregation(명령과 조회의 책임 분리)을 나타냅니다. 이름처럼 시스템에서 명령을 처리하..
만약.. 모든 메서드에 대해 시간을 측정하고자 한다면 ? [ 문제 ] - 회원가입,회원 조회 같은 비즈니스 로직은 "핵심 관심 사항"이다. - 그러나, 시간을 측정하는 로직은 "공통 관심 사항"이다. - 시간을 측정하는 로직과 핵심 비즈니스의 로직이 섞여서 유지보수가 어렵다. - 시간을 측정하는 로직을 별도의 공통 로직으로 만들기 매우 어렵다. (시작,끝 점에 모두 시간을 측정해야하므로) - 시간을 측정하는 로직을 변경할 때 모든 로직을 찾아가면서 변경해야 한다 (분 단위로 보다가 초 단위로 변경하려면 모든 로직을 찾아서 일일이 찾아서 변경해야함) [ 해결 ] AOP : 공통 관심 사항(cross-cutting concern) 과 핵심 관심 사항(core concern) 분리 [ 시간 측정 AOP 등록 ..
[ 홈 화면 추가] [ 회원 등록 ] input 태그 안에 name이 서버로 넘어올 때의 key값이다. [실제 회원 등록 기능] 1. 등록 버튼 눌렀을 때 , 웹 화면에서 데이터를 전달 받을 폼 객체 ( 원래는 DTO로 받는다고 알고 있었는데, 일단 강사님은 기본적으로 이렇게 만드신 것 같다) 2. 실제로 회원을 등록하는 기능 "redirect:/" = 홈 화면으로 돌아가기 위해서 [ 회원 조회 ] member 리스트 자체를 model에 담아서 view template에 넘김 each="member : ${members}" 객체를 하나 가져와서 member에 담음 *자료 출처* 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 (김영한)