Spring14 [Spring] Annotation 정리 @Controller Presentation Layer의 MVC Controller에 사용한다. 스프링 웹 서블릿에 의해 웹 요청을 처리하는 컨트롤러 빈으로 선정한다. @Service Service Layer 클래스에 사용한다. @Repository DAO 또는 Repository 클래스에 사용한다. DataAccessException 자동변환과 같은 AOP 적용대상을 선정하기 위해 사용한다. @Component @Repository, @Service, @Controller 의 레이어 구분을 적용하기 어려운 일반적인 경우에 설정한다. @Scope component의 scope을 설정한다. 기본값은 singleton이다. @Configuration 설정 클래스임을 명시한다. @Bean 스프링 컨테이너가 관.. 기록/BACKEND 2022. 5. 3. [Spring] 프로젝트 실행 순서 1. 서버 실행 -> server.xml 서버가 실행되면 서버의 server.xml 파일로 들어가서 프로젝트에 대한 context를 읽는다. 2. 현재 프로젝트 읽기 시작 -> META-INF/context.xml 현재 프로젝트로 들어오면 가장 처음으로 META-INF의 context.xml을 읽는다. context.xml에는 주로 db정보가 들어있다. (JDNI 위해) 3. web.xml 1. 웹 관련X context-param : root-context.xml 위치를 알려준다. listener : Spring Container를 생성한다. 이 컨테이너를 servlet, filters에서 같이 쓴다. 2. 웹 관련 filer, filter-mapping : 필터를 지정하고 매핑한다. servlet : .. 기록/BACKEND 2022. 5. 2. [Spring] REST API 1. REST API란 - Representational State Transfer의 약어 - HTTP URI를 통해 제어할 자원(Resource)를 명시하고, HTTP Method(GET,POST,PUT,DELETE)를 통해 해당 자원을 제어하는 명령을 내리는 방식의 아키텍처 - 서버는 요청으로 받은 리소스에 대해 순수한 데이터를 전송한다. 데이터처리만 하거나, 처리 후 반환될 데이터가 있다면 JSON이나 XML형식으로 전달한다. - GET/POST 외에 PUT, DELETE 방식을 사용해 리소스에 대한 CRUD처리를 할 수 있다. - 가장 큰 단점은 정해진 표준이 없고 암묵적인 표준만 정해져있는 것이다. 하이픈(-)은 사용하지만 언더바(_)는 사용하지 않는다. 특별한 경우를 제외하고 대문자 사용은 하.. 기록/BACKEND 2022. 4. 29. [Spring] REST API(feat.jackson-databind, json) json 라이브러리와 jackson-databind 라이브러리를 이용한 rest api 작성 방법이다. jackson-databind라이브러리는 객체를 JSON포맷의 문자열로 변환시켜서 브라우저로 전송한다. 비슷한 라이브러리로, jackson-dataformat-xml라이브러리는 객체를 xml로 브라우저로 전송한다. 1. pom.xml 라이브러리를 추가한다. com.fasterxml.jackson.core jackson-databind 2.13.2.2 org.json json 20220320 2. Controller jackson 사용 X JSONObject를 생성해서 값을 저장한다. json.toString을 반환한다. @GetMapping("/idcheck") public @ResponseBody S.. 기록/BACKEND 2022. 4. 28. [Spring] MyBatis Mapper interface 자동 주입 [이 글] 보다 조금 더 간단해진 방식이다. sqlSession을 직접 주입하지 않고 Mapper 위치에서 스캔하도록 한다. 1. root-context.xml sqlSession bean 설정부분을 지우고 대신 mybatis-spring:scan에 mapper interface가 있는 위치를 지정한다. 2. interface Mapper.java @Mapper 어노테이션을 붙인다. 붙이지 않아도 잘 스캔되기는 한다. @Mapper public interface MemberMapper { int idCheck(String id) throws Exception; void registerMember(MemberDto memberDto) throws Exception; MemberDto login(Map ma.. 기록/BACKEND 2022. 4. 27. [Spring] MyBatis 설정(feat.Spring) [이 글]과 달라진 점만 체크한다. 1. pom.xml mybatis, mybatis-spring, spring-jdbc, spring-tx를 사용한다. tx는 트랜잭션 처리를 위해서 추가한 것이다. org.mybatis mybatis 3.5.9 org.mybatis mybatis-spring 2.0.7 org.springframework spring-tx 5.3.18 org.springframework spring-jdbc 5.3.18 2. root-context.xml 1. 다음을 추가한다. 여기서 ds는 DataSource의 id다. 2. typeAliase를 하나하나 설정하려면 주석된 곳을 풀고 mybatis-config.xml을 남겨서 그 파일에 작성하면 된다. typeAliasesPackage.. 기록/BACKEND 2022. 4. 26. [Spring] Interceptor Interceptor spring container가 관리한다. 따라서 스프링의 모든 빈 객체에 접근할 수 있다. DispatcherServlet에서 Controller를 호출하기 전에 먼저 동작한다. servlet-context.xml에서 설정한다. * filter는 Servlet container에서 관리한다. DispatcherServlet 이전에 실행되고, web.xml에서 설정한다. 사용자 인터셉터.java spring 5.3 이상부터는 extends HandlerInterceptorAdapter 하지 않고 implements HandlerInterceptor한다. HandlerInterceptor 인터페이스를 상속받더라도 필요없는 메서드는 오버라이딩하지 않아도 된다. public boolean.. 기록/BACKEND 2022. 4. 24. [Spring] File Download .jsp 파일 원본 이름 옆 다운로드 a태그를 만들었다. 이 태그에 속성을 몇 개 추가한다. 이름은 마음대로 해도 된다. 1. sfolder - 서버 저장 폴더명 2. sfile - 실제 저장 파일 이름 3. ofile - 원본 파일 이름 ${file.originFile} [다운로드] a 태그가 클릭되면 실행되는 이벤트 함수를 만들었다. (js) 이 함수는 파일 다운로드 form에 값을 넣고 submit 시킨다. $('.filedown').click(function() { $(document).find('[name="sfolder"]').val($(this).attr('sfolder')); $(document).find('[name="ofile"]').val($(this).attr('ofile')); $.. 기록/BACKEND 2022. 4. 23. [Spring] File Upload apache commons의 fileupload를 사용했다. pom.xml 라이브러리를 추가한다. commons-fileupload commons-fileupload 1.4 servlet-context.xml 1. 인코딩, maxUploadSize, maxInMemorySize를 설정한다. 이 외에도 설정할 수 있다. (api문서 참고) maxUploadSize : 한 요청당 업로드가 허용되는 최대 용량. 바이트 단위로 설정. 기본값(-1)은 용량에 제한이 없다. maxInMemorySize : 디스크에 저장하지 않고 메모리에 유지하도록 허용하는 바이트 단위의 최대 용량. 사이즈가 이보다 클 경우 이 이상의 데이터는 파일에 저장된다. 기본값은 10240바이트다. ver. SpringBoot 스프링부트에서.. 기록/BACKEND 2022. 4. 22. [Spring] 예외처리하기 - ControllerAdvice web.xml (404, 500 등의 에러 페이지 설정) 기존 방식 404 /error/404.jsp 500 /error/500.jsp Spring 8~11줄. DispatcherServlet을 만들면서 throwExceptionIfNoHandlerFound를 true로 설정한다. 이렇게 설정하면 error를 exception으로 던져서 같이 처리할 수 있게 된다. 기본은 false인데, DispatcherServlet이 NOT_FOUND 에러를 바로 보낸다는 의미다. setThrowExceptionIfNoHandlerFound Set whether to throw a NoHandlerFoundException when no Handler was found for this request. This exc.. 기록/BACKEND 2022. 4. 21. [Spring] DI DI (Dependency Injection) - 객체 간의 의존 관계를 자신이 아닌 외부의 조립기가 수행한다. - 제어의 역행(IoC : inversion of Control)이라는 의미로 사용한다. - DI를 통해 시스템에 있는 각 객체를 조정하는 외부 개체가 객체들에게 생성 시에 의존관계를 줌 - 느슨한 결합(loose coupling)의 주요 강점 : 객체는 인터페이스에 의한 의존관계만을 알고 있으며, 이 의존관계는 구현 클래스에 대하나 차이를 모르는 채 서로 다른 구현으로 대체가 가능하다. - Spring의 DI 지원 : Spring Container가 DI 조립기를 제공한다. 스프링 설정파일을 통해 객체 간 의존관계를 설정하고, 제공하는 API를 이용해 객체를 사용한다. 용어 정리 Bean -.. 기록/BACKEND 2022. 4. 20. [Spring] JNDI 설정하기 [기존 Servlet에서 Connection Pool을 얻던 방식]을 Spring에서도 사용하는 방법이다. 파일 하나만 변경하면 된다. WEB-INF > spring > root-context.xml org.springframework.jndi.JndiObjectFactoryBean의 setJndiName에 value를 설정한다. org.springframework.jndi.JndiObjectLocator에서 상속받은 메서드인데, java:comp/env/로 시작하지 않고 resourceRef가 true로 설정돼있다면 자동으로 prefix를 붙여준다. META-INF > context.xml 저번과 동일하다. WEB-INF/web.xml 기록/BACKEND 2022. 4. 19. 이전 1 2 다음