1. @Autowired로 SqlSession을 불러다가 sqlSession를 이용@Repositorypublic class BoardDao { @Autowired private SqlSession sqlSession; public List select(){ return sqlSession.selectList("boardselect"); }} 다중DB 연결은 연결DB마다 sqlSession, sqlSessionTemplate를 만들어서@Autowired로 끌어올때 다르게 만들었던 id값으로 끌어다가 쓰면 그 DB에서 쿼리가 돔 2. interface SampleDao에 @Mapper 선언하고 설정파일에서 mapper.xml과 연결@Mapperpublic interf..
문제상황 아래와 같이 Domain Entity에 생성일자를 @CreationTimestamp로 자동으로 입력하도록 했음. ... @CreationTimestamp @Column(updatable = false) private LocalDateTime createdDate; ... 로컬에서 잘 됐음. ubuntu서버로 배포 했더니 화면에 이상한 시간이 표시됌. DB에도 이상한값이 들어가 있음. ubuntu timezone 때문인가? 해서 바꿔봤는데 여전함. 그 이상한 시간은 현재시간-9시간 값이었는데, GMT+9 라는, 한국은 표준시간보다 9시간 뒤? 라서 그랬나봄. 시도 구글링 하면서 여러 방법을 시도 해봄 1. jar 파일 실행 명령어에 --user.timezone="Asia/Seoul" 추가(또는 -..
문제상황 public class TbCollection { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; @ElementCollection @Builder.Default @CollectionTable private List elements = new ArrayList(); } @ElementCollection에 default로 LAZY가 들어있다. @ElementCollection타고 들어가면 확인가능. @RestController public class TbCpollectionController { @Autowired TbCollectionService tbCollectionServ..
1-1. Master-Detail, Detail테이블에 master 외래키 public class Master { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; private String name; } public class Detail { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long mid; private String description; @OneToOne private Master master; } 장점: Master모르게(수정없이) Detail기능을 추가 할 수 있음. 단점: Master조회 하는걸로는 Detail을 불러오지 못함. Ma..
@OneToOne Master class는 수정하지 않아야 함 >>> 단방향 public class Detail { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @OneToOne private Master master; } @JoinColumn 선언안하면 중간 테이블 생긴다는데.. 안생기는데? @OneToOne: 기본 EAGER @OneToOne(optional = false): 연결된 Master가 무조건 있음 findById() join findByXXX() Detail만 조회 findByXXX().getMaster() Detail조회 후 Master조회 optional = false일때 findById() (inn..
query method 사용시, projection 하기 무지성 dto 만들고, 무지성 query method 만들기 @Data @NoArgsConstructor @AllArgsConstructor public class Dto { private String id; } List findByOrderByIdDesc(); WARN [org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver:207] Resolved [org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from typ..

개발 초기에 security 무시하기 위해서 다음 코드 추가했음. .antMatchers("/**").permitAll() 근데 이제 진짜로 security써 먹어야 해서 위 코드는 주석치고, 필요한 설정들 설정함. 근데 갑자기 cors가 또 뜨기 시작함. permitAll() 요청 빼고는 다 cors 뜸. preflight 요청이 401 인증되지 않은 요청이라고 뜸. 구글랑 하다가 다음 사이트 참고함 https://oddpoet.net/blog/2017/04/27/cors-with-spring-security/ 해결 다음 소스 추가 import org.springframework.web.cors.CorsUtils; ... .requestMatchers(CorsUtils::isPreFlightReques..

기본 개념, 큰 그림은 여러 책, 여러 블로그 많이 나올꺼임. 여기서는 실제 구현 시, 고려할 점들 몇가지 적을꺼임. token에 어디까지 담을 수 있음? 내가 넣고 싶은거 넣을 수 있음? 결론은 맞음. Map 객체도 담을 수 있음. token에 보통 사용자ID를 담음. token을 만들 때, String값을 담아서 만들꺼임. 다음은 내가 참고한 책의 예제 소스임. private String makeToken(Date expiry, User user) { Date now = new Date(); return Jwts.builder() .setHeaderParam(Header.TYPE, Header.JWT_TYPE) .setIssuer(jwtProperties.getIssuer()) .setIssuedAt..