IT 공부/자바와 웹 애플리케이션37 [스프링] - Formatter 개념 정리 1. 파라미터 자동 수집과 포매터 스프링 웹 MVC의 장점 중 하나는 쓸데 없는 코드를 줄일 수 있다는 점이다. 쿼리 스트링 등으로 전달되는 파라미터를 자동으로 캐치하고 형 변환을 통해 인자로 바로 전달할 수 있다는 점도 엄청난 장점이다. 이전에는 HttpServletRequest에서 getParameter()를 통해 일일이 문자열 데이터를 받아 형변환을 했지만, 스프링에서는 그런 코드는 생략된다. 하지만 생략되는 만큼 문제가 발생하는 법! 특히 HTTP 요청의 쿼리 스트링이나 body에 포함되는 데이터는 기본적으로는 문자열이다. 문자열을 자동으로 String, int, long, boolean으로 형변환하는 데는 아주 크게 무리는 없지만, 문자열을 원하는 객체 타입으로 바꾸려면 개발자가 설정을 해줘야 .. 2024. 1. 6. [스프링] - 스프링 웹 MVC 프로젝트 세팅 방법 # 스프링 프레임워크 프로젝트 생성 # 스프링(Spring) 프레임워크는 웹에 주로 사용되지만 그렇다고 웹에 종속된 프레임워크가 아니다. 스프링은 의존성 주입(Dependency Injection) 기법을 적용한 객체지향 프레임워크다. 따라서 스프링의 코어는 의존성 주입과 관련된 기술이고, 바로 여기에 웹MVC와 같은 라이브러리를 추가로 설정해 웹 프로젝트로 만들어 사용하는 것이다. 여기서는 웹을 기반으로한 스프링 프레임워크 프로젝트 세팅에 대해 정리하려고 한다. 왜냐하면 자바 스프링 프로젝트는 언제나 프로젝트 세팅이 까다로웠기 때문이다. 이 참에 정리해보았다. ※ 원래 프로젝트 빌드 시, 롬복(lombok)이나 로그(log4j2)를 함께 쓰지만, 여기서는 순수하게 스프링만 파악하기 위해 일부러 생략해보.. 2024. 1. 6. [MyBatis] - 마이바티스를 단독으로 빌드하고 사용하는 방법 1. MyBatis 단독 설정 방법 마이바티스란 SQL 문법을 xml 파일로 따로 분리하기 위해 사용되는 라이브러리다. 기본 목표는 Mapper라 불리는 자바 인터페이스에 SQL 문법을 매핑시키는 것이 목표다. 이렇게 하면 일일이 JDBC에서 코드로 SQL 문법을 사용할 필요가 없다. xml 파일만 수정하면 되는 것이다. 그래도 최고의 이점은 이렇게 SQL 문법을 코드로부터 분리시키면 자바 애플리케이션 개발자는 매퍼 인터페이스만으로도 개발을 할 수 있다는 점이다. 굳이 복잡한 구현 상세 사항에 대해 몰라도 된다. (만약 JDBC를 사용했다면 일일이 상세 사항을 구현해야 했을 것이다.) 아래의 코드의 구현체가 적당히 만들어진다고 가정하고 자유롭게 매퍼 인터페이스를 사용하기만 하면 된다. 사실 마이바티스는 .. 2024. 1. 6. [lombok] - @RequiredArgsContructor와 @Qualifier 같이 쓰는 원리 스프링 프로젝트에서 @Qualifier 어노테이션을 통해 원하는 빈(bean)의 이름을 특정해 주입받을 수 있다. 그러나 롬복과 함께 사용하기 위해서는 클래스패스에 아래의 lombok.config 파일을 아래처럼 설정해야 비로소 제대로 스프링이 의존성을 주입해줄 수 있다. lombok.copyableAnnotations += org.springframework.beans.factory.annotation.Qualifier 이 포스팅은 위 파일을 사용해야 하는 이유에 대한 것이다. 1. 생성자 통해 의존성 주입 받기 스프링 프레임워크 사용 시, 일반적으로 생성자를 통해 의존성을 주입받는다. 필드 주입과 세터 주입은 각각의 단점이 명확하기 때문에 잘 사용되진 않는다. 생성자를 통해 의존성을 주입받기 위해서는.. 2024. 1. 6. [서블릿] - ServletRequest의 Character Encoding을 utf-8로 설정해야 하는 이유 1. 서블릿 Request 인코딩 문제 @WebFilter(urlPatterns = { "/*" }) public class UTF8Filter extends HttpFilter { @Override protected void doFilter(HttpServletRequest req, HttpServletResponse res, FilterChain chain) throws IOException, ServletException { req.setCharacterEncoding("UTF-8"); chain.doFilter(req, res); } } POST 메소드로 들어오는 서블릿 리퀘스트에서 데이터를 뽑아내면 한글의 경우 깨지는 문제가 발생한다. 그래서 위와 같이 필터(Fitler)를 사용해 POST re.. 2024. 1. 5. [HTTP] - Connectionless와 지속 연결 및 stateless와의 차이 1. TCP 프로토콜의 연결 작업의 오버헤드 HTTP 프로토콜은 네트워크 5계층에서 가장 최상단인 애플리케이션 레이어(Application Layer)에 속하는 프로토콜로서, 웹(World Wide Web)이라 불리는 인터넷 정보 공유 시스템의 기반이 되는 프로토콜이다. 전송 레이어와 네트워크 레이어로는 각각 TCP와 IP 프로토콜 위에서 동작한다. 특히 TCP는 연결에 있어서 안전성이 UDP 프로토콜보다 좋기 때문에 TCP는 UDP에 비해 성능 저하를 감수하는 대신 제대로 된 연결(Connection)을 보장해준다. TCP의 연결 과정에서 three way handshake 라고 불리는 방식은 알고 보면 어떻게든 해서라도 서로 연결이 되었는지 확인하겠다는 의도에서 구현된 기술이다. 딱 그만큼 연결을 보.. 2024. 1. 5. [톰캣] - 프로젝트 배포 시 라이브러리 위치 1. 톰캣 자체 내장 라이브러리 자바 웹 백엔드 프로젝트는 여러 라이브러리에 의존한다. 따라서 실제 배포를 할 때는 내가 사용하고 있는 라이브러리를 잘 분류하고 관리할 수 있어야 한다. 예를 들어, 롬복(lombok)처럼 소스코드를 수정만 할 뿐, 일단 컴파일하고 나면 더 이상 사용하지 않는 라이브러리는 배포할 때는 필요 없을 것이다. JUnit과 같은 테스트 프로그램도 마찬가지다. 배포 시에는 JUnit 라이브러리는 필요 없다. 이때 필수적인 의존성 라이브러리 중 일부는 너무나 중요한 기술이기 때문에 이미 톰캣 프로그램 자체에서 라이브러리가 내장된 경우가 있다. 예를 들어, Serlvet이 그러한 기술이다. 톰캣이 서블릿 객체를 관리하고 실행하는 서블릿 컨테이너이기 때문에 서블릿 코드를 이미 확보하고 .. 2024. 1. 3. [JUnit] - 아는 만큼만 정리.... JUnit은 Java 진영에서 필수적으로 활용되는 테스트 코드다. 그래선지 IDE와 빌드툴에서 자동으로 사용할 수 있도록 설정되어 있어 특별히 JUnit을 독립적으로 사용하는 경우는 드문듯하다. 처음에는 JUnit을 따로 독립적으로 활용해 그 원리를 파악해야 하나 싶었지만 그냥 관뒀다. 굳이 이렇게 테스트를 하지도 않을 뿐더러, 따라서 독립적으로 JUnit을 사용하는 것에 대해 공부하는 것이 시간 낭비로 여겨졌기 때문이었다. 그래서 솔직히 IDE 환경에서 벗어나 JUnit를 독립적으로 사용하는 방법에 대해서는 모르겠다. 앞으로도 IDE를 통한 JUnit 사용에는 익숙해지려고 노력하겠지만, 독립적인 JUnit 사용이 필요한 순간이 오지 않으면 굳이 원리를 공부할 생각은 없다. 너무 깊게 생각하지 말고 이제.. 2024. 1. 3. [Log4j2] - Log4j2 개념과 작동 원리 및 사용법 총 정리 1. 로깅 시스템과 Log4j2 라이브러리 로그(log)란 소프트웨어 개발 과정, 혹은 프로그램 작동 시 발생하는 이벤트에 대한 기록을 말한다. 블랙박스로 주행 중, 주차 중에서 발생하는 이벤트를 기록하는 것과 똑같은 목적이다. 소프트웨어에서 로그는 디버깅이나 작동 추적, 모니터링, 사용자 데이터 분석 등에 활용하기 위해 온갖 기록을 모으는 시스템이다. 물론 대부분의 로그 기록은 오류 검증 및 보안을 주된 목적으로 활용된다. 로그 데이터는 최종적으로 인간이 읽고 이해해야 하기 때문에 텍스트로 저장(리포트)되며, 콘솔 화면(stdout, stderr)에 출력하거나 파일에 기록하고 파일을 열람해 살펴볼 수 있다. 이렇게만 보면 단순히 Console.log()나, System.out.println() 과 같은.. 2024. 1. 3. 이전 1 2 3 4 5 다음