본문 바로가기

spring13

Exception handling 서블릿 컨테이너 예외처리의 두가지 방식 1. Exception(예외) => 무조건 500에러 2. response.sendError(Http 상태 코드, 오류 메시지); => 상태코드별 에러  (자바를 직접 실행하는 경우)1. Exception: 자바의 메인 메서드를 실행하는 경우 main이라는 이름의 스레드가 실행.2. 실행 도중에 예외를 잡지 못하고 처음 실행한 main 메서드를 넘어서 예외가 던져지면, 예외 정보 남기고 스레드 종료  (웹 애플리케이션)1. 웹 애플리케이션은 사용자 요청별로 별도의 쓰레드가 할당되고, 서블릿 컨테이너 안에서 실행.2. 애플리케이션에서 예외가 발생했는데, 어디서 try catch로 예외를 처리하면 문제가 없다.3. 하지만 애플리케이션에서 예외를 잡지 못하고 서블릿 바깥.. 2024. 6. 24.
spring MVC 1. 직접적으로 파일 경로를 알려주지 않고 컨트롤러에서 그대로 render를 해주고 싶으면 webapp - WEB-INF 폴더 안에 렌더할 파일을 넣는게 룰이다. 이 안의 파일은 외부에서 호출해도 그대로 호출되지 않는다대신 컨트롤러 (서블릿)에서 포워딩하는 과정을 거쳐야 한다.  2. redirect VS forwardredirect forward실제 클라이언트에 응답이 나갔다가 클라이언트가 다시 요청서버 내부에서 일어나는 호출클라이언트 인지 가능 URL경로 변경클라이언트가 인지 못함. 현재경로 localhost:8080/something/new ; vs     localhost:8080/save            localhost:8080/something/new/save 2024. 6. 15.
Bean Scope빈스코프 1. 싱글톤 스코프 - 빈을 조회하면 스프링 컨테이너는 항상 같은 인스턴스의 스프링 빈을 반환한다. 2. 프로토타입 스코프 - 빈을 조회하면 스프링 컨테이너는 항상 새로운 인스턴스를 생성하고 필요한 의존관계를 주입하여 초기화하고 반환한다. 이후 클라이언트에게 제공하고 더이상 관리하지 않는다. 빈을 관리할 책임은 클라이언트에게 있다. 고로 @PreDestroy같은 종료 메서드가 호출되지 않는다. 싱글톤 안에서 프로토타입 빈 사용하는 경우 (프로토타입 스코프를 싱글톤 빈과 함께 사용할 시) - 싱글톤 안의 프로토타입 빈은 이미 DI가 끝났기 때문에 안의 디펜던시가 프로토타입 빈이라고 해도 새로운 프로토타입 빈이 만들어지지 않는다.이를 해결하기 위해 ObjectProvider 클래스를 이용한다. 해당 클래스는.. 2024. 6. 2.
에디터 글 DB 저장, 이미지 base 64인코딩 데이터 DB저장 크게 스프링과 관련있는 것 같지는 않지만 카테고리 추가하기 귀찮기 때문에 여기다가 적어야겠다. toast ui에 있는 데이터를 그냥 getHTML()해서 DB에 저장하고 이걸 불러오면 될 줄 알았는데 아니었다.UI단과 DB에 저장될 때 인식 가능한 캐릭터가 다르기 때문에 특정 문자는 바꿔주어야한다. 대표적인 것이 " ' &이런 문자다.다만 인코딩을 해줘야할 것 같지만, 그대로 getHTML() 이후 server단에서 콘솔을 찍어보면 인코딩이 된 상태로 db에 저장됨을 확인할 수 있다.function encodeHTML(html) { return html.replaceAll("&", "&") .replaceAll("", ">") .rep.. 2024. 5. 29.
@AutoConfig, @ComponentScan, @Autowired, Filter AppConfig에서는 @bean으로직접 설정정보 작성하고 의존관계도 따로 명시해야한다.AutoConfig (@ComponentScan, @Autowired)를 사용하면 DI를 알아서 해준다// configurepackage hello.core;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.FilterType;@Configuration@ComponentScan( excludeFilters = @ComponentScan.Filter(type = F.. 2024. 5. 28.
Spring Container의 생성 과정 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);1. 해당 구문을 통해서 AppConfig의 정보를 준다.  2. 스프링 컨테이너가 만들어지면서 @Bean 어노테이션이 붙은 메소드의 이름을 빈 이름으로 설정하고 빈 객체를 리턴값으로 설정한다. 이렇게 스프링 빈을 등록한다.@Beanpublic MemberRepository memberRepository(){ return new MemoryMemberRepository();}3. 스프링 빈이 의존관계 설정을 해준다. - Configuration의 설정 정보를 참고해서 스프링 컨테이너가 DI를 해준다.싱글톤을 준수한다.@Bean(name.. 2024. 5. 23.