일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- IT
- Spring
- MSA
- Galera Cluster
- Algorithm
- design pattern
- 백준
- OS
- JPA
- redis
- Data Structure
- 알고리즘
- JavaScript
- spring webflux
- 네트워크
- 운영체제
- c언어
- Kafka
- 자료구조
- C
- react
- 컴퓨터구조
- 자바
- 파이썬
- Heap
- MySQL
- Java
- 디자인 패턴
- mongoDB
- Proxy
- Today
- Total
목록Spring (19)
시냅스

Spring Security가 framework로 하는 일 ServletContext 내부로 가지 않고 Filter 수준에서 보안을 설정한다. 어플리케이션의 모든 상호작용에 사용자 인증 요구 디폴트 로그인 폼 생성 user 라는 이름과 콘솔에 출력한 비밀번호를 사용한 폼 기반 인증 지원 BCrypt로 저장할 비밀번호 보호 사용자 로그아웃 지원 CSRF 공격 방어 Session Fixation 방어 보안 헤더 통합 HTTP Strict Transport Security로 요청을 보호 X-Content-Type-Options 통합 Cache Control (어플리케이션에서 특정 스태틱 리소스에 캐시를 허용하도록 재정의할 수 있다.) X-XSS-Protection 통합 X-Frame-Options 통합으로 클..

영속성 컨텍스트 persistence context 엔티티를 영구 저장하는 환경 영속성 컨텍스트는 논리적인 개념으로 눈에 보이지 않는다. 엔티티 매니저를 통해 영속성 컨텍스트에 접근한다. J2SE(일반 자바 어플리케이션 개발 툴) EntityManger 와 영속성 컨텍스트는 1:1 의 관계이다. J2EE (서버용 자바 어플리케이션 개발 툴), Spring 과 같은 컨테이너 환경 EntityManager와 영속성 컨텍스트는 N:1 의 관계이다. 엔티티의 생명주기 비영속 (new/transient) 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태 Member member = new Member(); member.setId("member1"); member.setUsername("회원1"); 영속 (manag..

Spring Data JPA CRUD + 쿼리 여러 데이터베이스에 동일한 인터페이스를 제공한다. 메서드 이름으로 쿼리를 생성한다. 스프링에서 id 값만 넘겨도 도메인 클래스로 바인딩된다. 용례 - 스프링 데이터 JPA 적용 public interface SpringDataJpaItemRepository extends JpaRepository { // 각각 객체와 PK이다. List findByItemNameLike(String itemName); List findByPriceLessThanEqual(Integer price); // 쿼리 메서드 (아래 메서드와 같은 기능 수행) List findByItemNameLikeAndPriceLessThanEqual(String itemName, Integer p..

JPA, Java Persisitence API 자바의 주력 ORM 데이터 접근 기술이다. ORM(Object-Relational Mapping) 은 객체와 데이터베이스의 관계를 매핑해주는 도구이다. 객체는 객체대로 설계, 데이터베이스는 데이터베이스대로 설계 => 중간에서 ORM이 맵핑한다. 데이터베이스 접근을 프로그래밍 언어의 관점에서 맞출 수 있다. SQL 문을 직접 작성하지 않고 엔티티를 객체로 표현할 수 있다. 객체를 통해 간접적으로 데이터베이스를 다룬다. 대개 Querydsl과 함께 사용한다. 주로 hibernate 구현체를 사용한다. 1차 캐시와 동일성(identity) 를 보장한다 트랜잭션을 지원하는 쓰기 지연(transactional write-behind) 지연 로딩(lazy Loadin..

MyBatis JdbcTemplate 보다 더 많은 기능을 제공하는 SQL Mapper이다. SQL을 XML에 편리하게 작성할 수 있다. 동적 쿼리에 대한 보완이 크게 이뤄졌다. 추가적인 설정이 필요하다. 용례 - Mapper @Mapper public interface Mapper { void save(Item item); void update(@Param("id") Long id, @Param("updateParam") ItemUpdateDto updateParam); Optional findById(Long id); List findAll(ItemSearchCond itemSearch); } MyBatis 매핑 XML을 호출해주는 인터페이스이다. @Mapper 를 통해 mapper라는 것을 선언한다..

JdbcTemplate JdbcTemplate은 JDBC를 편리하게 사용할 수 있는 SQL Mapper이다. JdbcTemplate은 spring-jdbc 라이브러리에 포함되어 있어 복잡한 설정 없이 스프링으로 JDBC를 사용할 때 기본으로 사용되는 라이브러리이다. 콜백 패턴(RowMapper)을 사용하여 반복잡업을 대신해준다. 개발자는 SQL을 작성하고, 전달할 파라미터를 정의하고, 응답 값을 매핑하기만 하면 된다. 아래는 JdbcTemplate이 대신 처리해주는 작업들이다. 커넥션 획득 statement를 준비하고 실행 결과를 반복하도록 루프 실행 커넥션 종료, statement, resultset 종료 트랜잭션 다루기 위한 커넥션 동기화 예외 발생시 스프링 예외 변환기 실행 단점으로는 동적 SQL을..

프론트 컨트롤러 패턴으로 이뤄져있다. 서블릿이 호출되면 HttpServlet이 제공하는 service가 호출된다. 스프링 mvc는 DispatcherServlet의 부모인 FrameworkServlet에서 service를 override해두었다. FrameworkServlet.service를 시작으로 여러 메서드가 호출되면서 DispatcherServlet.doDispatch()가 호출된다. doDispatch()는 다음과 같다. 요청이 들어오면 핸들러 매핑을 통해 핸들러(컨트롤러)를 조회할 수 있는지 확인하고 핸들러 어댑터 목록에서 핸들러를 처리할 수 있는 핸들러 어댑터가 있는지 확인해서 핸들러 어댑터를 통해 핸들러의 컨트롤러를 실행하고 반환하는 정보를 ModelAndView로 변환해서 반환한다. 반환..

스프링 빈 Spring Bean 이란? 스프링 컨테이너에 의해 관리되는 자바 객체(POJO, plain old java object) @Bean 개발자가 컨트롤이 불가능한 외부 라이브러리들을 Bean으로 등록하고 싶은 경우 에 사용된다. 메소드 또는 어노테이션 단위에 붙일 수 있다. @Component 개발자가 직접 컨트롤이 가능한 클래스들의 경우에 사용된다. 클래스 또는 인터페이스에 붙일 수 있다. 스프링 컨테이너 Spring Container 란? 스프링 컨테이너는 자바 객체의 생명 주기를 관리하며, 생성된 자바 객체들에게 추가적인 기능을 제공하는 역할을 한다. IoC와 DI의 원리가 이 스프링 컨테이너에 적용된다. 스프링 컨테이너는 xml 기반으로 만들 수 있고, 에노테이션 기반의 자바 설정 클래스..

첫 만남! 다행히 상기와 같은 이유로 구성원 간에 맞지 않는 일은 없었다... 구성원들께서는 누구보다 적극적으로 임해주시려는 태도가 보여 나도 덩달아 신나 '이거 해볼까요?' '저거 해볼까요?' 라는 의견을 많이 피력하게 됐다. 부담스러워 하지 않으시고, 마땅한 피드백을 주셨던 구성원들께 다시 한 번 감사하다는 말씀드리고 싶다. 주제 선정 현재 최대의 관심사이며 취미이며 비즈니스인 개발을 주제로 꼽았다. 그리고... 언제나 그렇듯 모방은 창조의 어머니다. '커리어리'는 우리의 목적에 적당히 부합하는 사이트였다. 게시물, 댓글, 프로필, 소셜로그인과 더불어 OG tag를 임베드 하는 기능을 갖고 있었고 개발자를 위한 커뮤니티 라는 점이 그랬다. 주제 선정 회의를 시작한지 5분 만에 작업에 착수하게 되었다...