Dev- 썸네일형 리스트형 mybatis selectKey 사용시 주의점(MAX() 사용 관련) 아래와 같이 사용해야 한다. (아래는 MySQL, 다른 DBMS는 찾아서 보시면 됩니다.) SELECT LAST_INSERT_ID() 아래와 같이 사용하면 데이터가 꼬일 수 있다. SELECT MAX(seq) FROM CS_ORDER 결론:각 DBMS의 가장 최근 pk값을 가져오는 함수를 써야 한다. 참고: https://stackoverflow.com/questions/3180510/last-insert-id-vs-select-maxid logger 변수 private static final 선언이유? 보통 아래와 같이 무의식적으로 logger를 선언한다.private static final Logger logger = LoggerFactory.getLogger(ThisClass.class); 스택오버플로우를 보면, - private: 다른 클래스에서 가로채 사용하지 못하도록- static: 인스턴스당 하나만 필요하므로, 또한 직렬화를 피하기 위해- final: 변경될 일이 없으므로 라고 되어있는데, 영어라서 자세한 이유는 모르겠지만, 여러가지 이유로 static은 제외할 것을 권장한다고 한다.따라서 아래와 같이 선언하면 될 것 같다.private final Logger logger = LoggerFactory.getLogger(getClass()); 참고:https://stackoverflow.com.. @PathVariable .(dot, 점) 포함된 값 받기 @PathVariable로 값을 보낼때, email과 같이 .을 포함한 값을 보내면url이 점을 데이터로 해석하지 않고, 도메인의 .으로 인식하는지 점 이전의 값만 넘어와서 한참 헤멨다. 해결법은 아래와 같다.@RequestMapping(value = "/checkEmailDupl/{email:.+}") jQuery ajax 동기식으로 사용하기 ajax를 사람이 직관적으로 생각했을때 그대로 사용하면 아래와 같은 문제가 발생한다. 가령 아래와 같은 경우이다./** * 폼 전송 */ function submitForm(formClass) { .......... // ajax 아이디 중복검사 if (validationResult == true) /** * 비동기식 ajax 함수 * async: true(defalut) */ checkIdDupl(); .......... // 최종 폼 전송 if ((validationResult = setFinalValidationResult(formClass)) == true) { /** * checkIdDupl()가 끝나기 전에 먼저 실행되어버린다. * --> 코드가 복잡해지면 파악하기 힘듦 */ printForm.. 유효성 검증 1. 백엔드 + 프론트-> 프론트 귀찮다2. 백엔드-> 간편하다. 틀이 있다. -> 화면 깜빡임, 서버 리소스3. 프론트-> 말도 안된다. 스프링 classpath가 가리키는 곳 리소스 관련 설정을 할때 classpath:~~~~~와 같은 설정을 많이 한다. classpath가 가리키는 루트 디렉토리가 어디일까 생각해봤을때,빌드 전 디렉토리를 보면 이해가 안 갈수가 있다. 가령 위와같은 디렉토리에서 mybatis 설정파일을 읽어온다고 했을때,classpath:mybatis/mybatis-config.xml 와 같이 설정을 해 준다. 그냥 어딘가에 resourses를 루트로 바라보게 해놨겠지..라고 생각을 했는데 사실은 빌드된 타겟 폴더에서classes를 루트로 잡고 있다고 한다. 스프링부트 AppicationContext 기본적으로 빈 팩토리 역할을 하며주로 빈, 리소스에 접근할 때 사용한다. public interface ApplicationContext extends EnvironmentCapable, ListableBeanFactory, HierarchicalBeanFactory, MessageSource, ApplicationEventPublisher, ResourcePatternResolver {AppicationContext가 상속하는 인터페이스들을 구현해 조금더 세분화되고, 명료하게 리소스 관련 접근을 처리할 수 있다. @ComponentScan(컴포넌트 스캔) 1. 스캔 위치 설정 (--> 문자열로 정하는 것보다는, 클래스로 정하는 것 추천)2. 필터: 스캔할, 하지 않을 어노테이션 설정 이전 1 ··· 3 4 5 6 7 8 9 ··· 15 다음