- @transactional
- Git
- 스프링부트
- DI
- 데이터베이스
- 1차원 배열
- spring
- nginx
- string
- SSL
- Django
- mysql
- springboot
- java
- Docker
- 자바
- join
- session
- AWS
- PYTHON
- ORM
- select
- 스프링
- 프로그래머스
- 문자열
- sql
- spring security 6
- jpa
- spring boot
- spring mvc
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
목록Java (80)
개발하는 자몽
Model과 @ModelAttribute에 대해서 정리가 필요한 것 같아서 글을 쓴다. Model Model은 객체다. HashMap 형태로 Controller에서 view에 필요한 데이터를 key, value로 넣어준다. key는 객체의 이름(view의 이름), value는 객체를 담는다. 넣어진 값은 view의 이름과 view를 렌더링 할 때 필요하다. Servlet의 request.setAttribute()와 비슷한 역할을 한다.(둘은 똑같지 않다. https://velog.io/@dbsrud9126/Spring-Model.addAttribute-vs-Request.setAttribute) @PostMapping("/add") public void add(@RequestParam String nam..
공부하면서 뷰 템플릿, 템플릿 엔진이 정확히 무엇인지 정리되지 않아서 글을 남긴다. 뷰 템플릿(View template)은 간단하게 HTML을 편리하게 생성하는 기능으로 일반적으로 HTML을 동적으로 생성하는 용도로 사용한다. 대표적으로 JSP와 Thymeleaf가 있으며, JSP보다는 Thymeleaf가 많이 사용된다. 모델(model) : 뷰에 출력할 데이터를 담아둔다. 뷰(view) : 모델에 담겨있는 데이터를 사용해서 화면을 그리는 일(HTML을 생성하는 부분, 렌더링)에 집중한다. 템플릿 엔진(Template Engine)은 템플릿 양식과 특정 데이터 모델에 따른 입력 자료를 합성하여 결과 문서를 출력하는 소프트웨어 또는 소프트웨어 컴포넌트를 말한다. 템플릿 엔진의 정의를 검색했을 때 이렇게 나..
프록시는 어떤 객체를 사용하려고 할 때 해당 객체에 직접 요청하는 것이 아닌 중간에 가짜 프록시 객체(대리인)를 둔다. 이 프록시 객체가 대신 요청을 받고 실제 객체를 호출한다. 프록시 모드를 설정하면 의존성 주입을 통해 주입되는 빈은 실제 빈이 아닌 해당 빈을 상속받은 프록시 객체이다. 스프링은 CGLIB 라이브러리(Byte Code Generation Library)를 사용하여 프록시 객체를 주입한다. 프록시 객체 내부에는 실제 빈을 요청하는 로직이 들어있다. 클라이언트의 요청이 들어오는 시점에 실제 빈을 호출한다. → 실제 빈의 조회를 필요 시점까지 지연 프록시 객체는 실제 객체를 상속받아서 만들어지므로 클라이언트 입장에서는 실제 빈을 사용하는 것과 동일한 방법으로 사용하면 된다. @Scope의 p..
빈을 찾기 위한 다양한 의존성 검색 방법 스프링 빈 스코프를 공부하다가 의존성 주입(DI)뿐만 아니라 의존성을 갖는 빈을 검색 (DL, Depndency Lookup)할 때도 있다는 것을 알게 되었다. 스코프가 prototype이거나 request인 경우가 대표적이다. Spring은 빈을 검색하기 위한 다양한 방법들을 제공한다. @Scope("prototype") //또는 @Scope("request") public class UserRequest { ... } 1. ApplicationContext 스프링은 DI 컨테이너인 ApplicationContext를 관리하고 있다. 그래서 ApplicationContext를 통해 필요한 빈을 검색할 수 있다. @Service @RequiredArgsConstr..
JUnit 테스트 케이스를 작성하면서 assertThat.isEqualTo()와 assertThat.isSameTo가 헷갈려서 정리한다. isSameAs() 주소 값 비교 "==" 비교 연산자와 동일 메모리 상에서 같은 객체를 참조하는지 확인 isEqualTo() 데이터 값 비교 equals() 메소드와 동일 객체가 서로 같은 값을 가지고 있는지 확인 isInstanceOf() 타입(class) 비교
수동 빈 등록과 의존관계 주입 @Bean 애노테이션은 method-level로 수동으로 빈을 등록할 때 사용한다. 메서드가 선언된 클래스 상단에는 @Configuration 애노테이션을 붙여 설정 정보 클래스임을 알려주고, 싱글톤이 깨지지 않도록 한다. (@Configuration을 붙이지 않아도 @Bean을 붙이면 다 빈으로 동록 되지만 싱글톤이 깨진다.) /* 수동 빈 등록 및 의존관계 주입 @Configuration, @Bean */ package hello.core; ... @Configuration public class AppConfig { @Bean public MemberService memberService() { //memberService에 의존관계로 memberRepository 주..
인프런 김영한 님의 스프링 인강을 보며 코딩을 하다가 궁금한 점이 생겨서 정리해본다. public class ApplicationContextSameBeanFindTest { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(SameBeanConfig.class); ... @Configuration static class SameBeanConfig { @Bean public MemberRepository memberRepository() { return new MemoryMemberRepository(); } @Bean public MemberRepository memberRepository2() { return ..
람다식(Lambda Expressions) 람다 함수는 프로그래밍 언어에서 사용되는 개념으로 익명 함수(Anonymous functions)를 지칭하는 용어이다. 람다식은 함수(메서드)를 간단한 식으로 표현하는 방법이다. 람다의 표현방법은 다음과 같다. 함수가 단일 실행문이면 괄호를 생략할 수 있다. 함수가 return문으로만 구성되어 있는 경우 괄호를 생략할 수 없다. A a = (매개변수) -> {구현코드}; a -> a*a; //매개변수가 하나인 경우, 괄호 생략가능 (int a ) -> a*a; //타입이 있는 경우 괄호 생략 불가능 (int a) -> System.out.println(a); //함수가 단일문장인 경우 괄호 생략가능 (int a, int b) -> {return a > b ? a..
내부 클래스 클래스가 다른 클래스를 포함하는 경우, 내부에 있는 클래스를 내부 클래스라고 한다. 내부 클래스로 선언 시 두 클래스의 멤버들 간에 서로 쉽게 접근할 수 있으며, 외부에는 불필요한 클래스를 감춤으로써 코드의 복잡성을 줄일 수 있다(캡슐화). 내부 클래스는 정의되는 위치에 따라 멤버 클래스와 지역 클래스로 나뉜다. 그리고 각 내부 클래스의 선언 위치에 따라 같은 선언 위치의 변수와 동일한 유효 범위(scope)와 접근성(accessibility)을 갖는다. 멤버 클래스 멤버 변수와 동일한 위치에 선언된 내부 클래스 `static` 예약어가 붙은 static 멤버와 instance 멤버로 나뉨 동일한 클래스뿐만 아니라 다른 클래스에서도 활용 가능 클래스의 멤버 변수와 성격이 비슷함 지역 클래스 ..
Class 클래스 Java의 모든 클래스, 인터페이스는 컴파일 후 .class 파일로 생성된다. 이 파일에는 멤버 변수, 메서드, 생성자 등의 객체의 정보가 담겨있다. Class 클래스는 컴파일된 class 파일에서 객체의 정보를 가져올 수 있다. forName() Class의 static 메소드인 forName은 클래스의 이름을 매개변수로 받아서 Class 객체를 리턴해준다. 이 메서드는 해당 statement가 수행될 때 매개변수로 받은 클래스를 메모리에 적재(load)한다. 이를 동적로딩이라 하며 상황에 따라 라이브러리나 클래스를 로드할 수 있어서 메모리를 아낄 수 있다. | Note - 동적 로딩(dynamic static) : 컴파일 시 데이터 타입이 모두 binding되어 자료형이 로딩되는 것..