공부기록/Spring (10) 썸네일형 리스트형 스프링에서 다른 서버와 비동기로 통신하는 방법 기존에 다른 서버와 통신하는 방법은, 만약 rest api였다면 restTemplate을 사용하면 됐습니다. 비동기적으로 통신하려면 asyncRestTemplate을 사용하면 됩니다. 그러나, 기본적으로 blocking io를 사용하고 있기 때문에, non-blocking io를 사용해야 진정으로 성능이 나올 수 있습니다. 그렇게 asyncRestTemplate을 사용하면, listenableFuture가 결과로 나오게 되는데, 그것에 callback으로 어떤 처리를 할지 작성할 수 있습니다. 아니면 그것을 completable future로 감싸서 사용을 하면 됩니다. asyncRestTemplate 뿐만 아니라, completableFuture를 사용하는 경우는 모두 비동기적으로 통신할 수 있습니다... layered architecture 레이어드 아키텍처는 애플리케이션 개발에 있어서 프레젠테이션 레이어, 서비스 레이어, 레포지토리 레이어, 그리고 DB레이어로 나누어 개발하는 것입니다. 이런 것에 장점은, 가독성과 유지보수에 좋고, OCP 원칙을 지키기 쉽게 됩니다. 예를 들어 orcale에서 mysql로 DB를 변경한다고 하면, datasource를 oracle로 변경하고, 레포지토리를 oracle용으로 만들어서 repository bean을 교체해주면 됩니다. 기존 코드의 변경없이 쉽게 확장할 수 있습니다. 그리고 프레젠테이션 레이어는 자바의 캡슐화 역할을 해줍니다. 그래서 api역할을 해줍니다. 오직 어떤 요청이 들어왔을 때, 어떤 응답을 돌려준다는 정의만 해놓으면 됩니다. 내부 구현, implementation은 서비스로직에서 담당.. Spring Native JVM 대신에 GraalVM을 사용하는 스프링이다. 왜 Native냐면 native image를 빌드의 결과로 생성한다 java 기반의 컴파일러와 vm을 구현 --- 1. polyglot 여러 언어 실행가능 2. 메모리 사용량이 JVM보다 적음 3. 실행시간이 훨씬 빠름 JVM은 .java파일을 .class파일로 변경하고, 그 후 운영체제별 JVM이 해당 운영체제에 맞는 기계어로 변경하여 실행한다. 하지만, graalVM은 .java파일을 바로 해당 운영체제에 맞는 기계어로 변경한다. 그래서 실행시간이 훨씬 빠르게 된다. 운영체제의 문제는 docker image로 만드는 것으로 해결된다. 항상 환경이 정해져있기 때문이다. 그러면 왜 JVM을 Graalvm으로 바꿔끼면 바로 spring을 사용할 수 있는 .. 스프링 면접 준비 다른 블로그 질문 참조.. 여기서 적을 수 있다고, 면접에서 대답할 수 있을까? 그건 잘 모르겠지만.. OOP가 뭐죠 객체지향 프로그래밍입니다. 상속, 다형성, 캡슐화, 인터페이스를 지원합니다. 상속 - 부모 클래스의 기능을 자식 클래스가 사용할 수 있습니다. 코드 중복제거라는 장점이 있긴하지만, 컴포지션으로 대체됩니다. 사실상 장점이 다형성밖에 없는 것 같긴 합니다. 다형성 - 코드상에서는 인터페이스를 의존하여, 실제 런타임에 구현 클래스를 사용하게 합니다. 추상에 의존하게 하여 OCP를 가능하게 해줍니다. 캡슐화 - 인터페이스와 구현을 분리할 수 있습니다. 퍼블릭 인터페이스만 테스트하면 되고, 나머지 구현은 적절히 바꿔도 괜찮습니다. 인터페이스 - 즉 추상화라는 말인데, 추상에 의존하게 하면 코드의 .. 토비의 스프링 13장 - 스프링 웹 기술과 스프링 MVC 클라이언트 시스템과 연동하는 책임을 맡고 있는 것이 바로 웹 프레젠테이션 계층 스프링은 기술의 변화가 잦은 웹 계층과 여타 계층을 깔끔하게 분리해서 개발하는 아키텍처 모델을 지지한다. 스프링 서블릿/스프링 MVC 프론트 컨트롤러 역할 Dispatcher Servlet 모든 컴포넌트는 서블릿 애플리케이션 컨텍스트의 빈으로 등록되어 동작함 Spring web flow → stateful 스타일의 웹 애플리케이션을 작성하게 해주는 프레임워크 수십여 가지의 자바 웹 프레임워크가 존재하며, 그중 상당수는 스프링과의 손쉬운 연동 기능을 제공해준다. 스프링이 직접 제공하는 웹 프레임워크 사용추천 - 스프링 MVC 13.1.2 두 가지 방향으로 발전하고 있음 유연성과 확장성에 중점을 두고 어떤 종류의 시스템 개발이나 .. 토비 스프링 5장 - 서비스 추상화 트랜잭션을 적용해보면서 스프링이 어떻게 성격이 비슷한여러 종류의 기술을 추상화하고 이를 일관된 방법으로 사용할 수 있도록 지원하는지를 살펴볼 것이다. 5.1 사용자 레벨 관리 기능 추가 의식의 흐름으로 사용자 레벨 관리기능을 추가함. 수정해야할 레거시 코드의 경우는 한번에 작성해도 되지않았을까 싶다. 한번에 도메인을 비교검사하는 checkSameUser같은 것을 활용. jdbc → rowMapper(이것도 jdbc를 사용하는한 자주사용하게 될듯하다.) ResultSet의 rs.get~함수에서 parameter로 오타를 주게되면, 실패한다. 어디서 실패했는지 알기 어려울수 있다. Level에 관한 설계 → 이게 중요한 것일까? 아직은 모르겠다. 다음 설명을 위한 빌드업일까? → 스프링의 기능을 적용하기 적.. 토비의 스프링 4장 - 예외 예외를 처리할 때 핵심원칙 - 모든 예외는 적절하게 복구되든지 아니면 작업을 중단시키고 운영자 또는 개발자에게 분명하게 통보돼야한다. 예외 블랙홀 - Catch 구문에서 아무것도 안하면 안된다. 무의미하고 무책임한 throws - 무조건 throws 시키면 안된다 Error - java.lang.Error 의 에러들. OutOfMemory 나 ThreadDeath 같은 에러는 catch 블록으로 잡아봤자 대응 방법이 없기 때문에, 이에 대한 처리는 신경쓰지 않아도 된다. Exception과 체크 예외 - java.lang.Exception - 개발자들이 만든 애플리케이션 코드의 작업 중에 예외상황이 발생했을 경우에 사용된다. Exception은 체크예외와 언체크 예외로 구분된다. 체크 예외 - Runti.. 토비의 스프링 3장- 템플릿 템플릿이란 → 성질이 다른 코드 중에서 변경이 거의 일어나지 않으며 일정한 패턴으로 유지되는 특성을 가진 부분을 자유롭게 변경되는 성질을 가진 부분으로부터 독립시켜서 효과적으로 활용할 수 있도록 하는 방법이다. 3.1 기존의 안좋은 코드 예시 3.1.1 예외처리를 해야함 connection에서 쿼리에 실패해도 connection을 close해야함 → 빠르게 자원을 반환하지 않으면 Connection pool의 리소스가 고갈될 수 있음. 문제는 close도 실패할 수 있음(SQLException 발생) 3.2 변하는 것과 변하지 않는 것 예외처리를 하여 괜찮아지긴 했지만, 코드 자체가 너무 복잡함 (try-catch-finally블록이 2중으로 중첩되어 있고, 모든 메서드마다 반복됨). → 이런 코드가 모.. 토비의 스프링 1장 베스트셀러인 이유가 있는 강추책 1.1 초난감 DAO -> 문제점이 많은 DAO클래스를 시작으로 리팩토링하면서 개선해나가는 작업으로 이야기를 풀어나가고 있음 1.2 중복되는 코드 메서드화, 관심사의 분리, 템플릿 메서드, 팩토리 메서드 패턴 소개 1.3 DB와 연결하는 부분을 아예 다른 클래스로 분리, 추상적인 것을 의존하도록 수정 1.4 오브젝트 팩토리 -> 여러가지 DAO를 만들수 있게하고, 제어의 역전 개념 소개(제어권한을 다른 객체에게 위임하는것) 1.5 드디어 스프링을 사용함, 스프링의 용어 설명. ApplicationContext가 어떻게 작동하는지 설명 1.6 싱글톤 레지스트리(싱글톤의 단점을 모두 없앴음), 오브젝트 스코프(기본적으로 싱글톤), stateless의 중요성 1.7 의존관계 주.. Spring Framework Overview 원문 스프링 오버뷰 버전 5.3.10 스프링은 자바 엔터프라이즈 애플리케이션을 만들기 쉽게 만든다. 그것은 당신에게 엔터프라이즈 환경에서 자바를 수용하는 모든 것들을 제공한다, 또한 JVM환경의 그루비와 코틀린을 지원한다, 애플리케이션의 니즈에 따라 다양한 종류의 아키텍쳐를 제공하는 유연성과 함께. 스프링 5.1+ 이후로, 스프링은 JDK8이상에서만 지원되며, jdk 11이상의 버전에 대한 지원도 제공한다. JAVA SE 60이 최소한의 버전이지만, 최신버전을 사용하는 것을 추천한다. 스프링은 다양한 범위의 애플리케이션 시나리오를 지원한다. 넓은 엔터프라이즈에서, 애플리케이션은 오래동안 존재해야하며, JDK와 애플리케이션 서버에서 실행되야하며, 그것의 업그레이드 사이클은 개발자의 컨트롤하에 없는(?_)... 이전 1 다음