Spring boot

Spring boot

[query Optimization] rdb와 객체의 차이에 대해

@Entity @Builder @AllArgsConstructor @NoArgsConstructor @Getter public class Friend { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "from_member") @JsonIgnore private ClubMember fromMember; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "to_member") @JsonIgnore private ClubMember toMember; @Enumerated(EnumTyp..

Spring boot

[query Optimization] LAZY 로딩과 N+1 문제

대부분의 경우, 어떠한 엔티티를 가져올 때 모든 연관된 엔티티도 함께 가져오는 eager fetch 대신, 그때 그때 필요한 엔티티만 join해서 가져오는 Lazy Fetch를 사용한다. 하지만 이러한 방법에는 N+1 문제가 발생하게 된다. [N+1 문제] N+1 문제는 데이터베이스에서 데이터를 조회할 때 발생할 수 있는 성능 이슈 중 하나다. N+1 문제는 한번의 쿼리로 가져올 수 있는 데이터를 가져오기 위해 N개의 쿼리를 더 실행하는 문제를 의미한다. 예를 들어, 게시물과 댓글을 저장하는 데이터베이스가 있다고 가정해보자. 각 게시물은 여러 개의 댓글을 가질 수 있다. 이때, 게시물과 그에 대한 댓글 정보를 모두 가져와야 한다고 가정하면, 다음과 같이 쿼리를 작성할 수 있다. SELECT * FROM ..

Spring boot

[walk-talk] 걸음 수 기반 채팅 어플 데모 영상

데모 영상 목록 - 2분할 채팅 영상 -실제 사용 영상 - 개인 화면 전체 서비스 영상 - 채팅 알림 기능 영상 2분할 채팅 데모 영상 -기존 채팅방 진입 및 채팅 수행 - 친구 요청, 수락 기능을 통한 친구 추가 이후, 채팅방 생성 - 생성된 채팅방에서의 채팅 테스트 실제 사용 영상 개인 화면 전체 서비스 데모 영상 채팅 알림 기능 영상

Spring boot

스프링 시큐리티 정리

Spring Security란? Spring Security는 Spring 기반의 애플리케이션의 보안(인증과 권한, 인가 등)을 담당하는 스프링 하위 프레임워크이다. Spring Security는 '인증'과 '권한'에 대한 부분을 Filter 흐름에 따라 처리하고 있다. Filter는 Dispatcher Servlet으로 가기 전에 적용되므로 가장 먼저 URL 요청을 받지만, Interceptor는 Dispatcher와 Controller사이에 위치한다는 점에서 적용 시기의 차이가 있다. Spring Security는 보안과 관련해서 체계적으로 많은 옵션을 제공해주기 때문에 개발자 입장에서는 일일이 보안관련 로직을 작성하지 않아도 된다는 장점이 있다. "인증" 절차 설명 1) 로그인 폼, 혹은 JwtAu..

Spring boot

[스프링 MVC] Part2 (서블릿)

서블릿에 대한 구현은 WAS가 처리한다. (개발자는 비즈니스 로직에 집중하면 된다) helloServlet ( request를 기반으로 서블릿 컨테이너가 request, response 객체가 생성 후 파라미터로 아래 메소드에 전달한다.) @WebServlet(name = "helloServlet", urlPatterns = "/hello") public class HelloServlet extends HttpServlet { //서블릿 메서드 호출시 서비스가 호출된다. @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out..

Spring boot

[스프링 MVC] Part 1 (웹 어플리케이션의 이해)

*김영한님의 스프링 MVC 강의를 기반으로 작성하였습니다. 웹 서버, 웹 애플리케이션 서버 HTTP: HTTP 메세지에 다양한 데이터를 담아 주고받는다. 웹 서버: 정적 리소스 담당. apache, Nginx 등. 웹 애플리케이션 서버(WAS): 동적, 정적 리소스 처리 가능. 하지만 애플리케이션 로직에 모든 것을 위임하면 안되기에 웹 서버에게 기본적으로 처리 가능한 것은 처리하게 시키고, 동적 리소스 같은 WAS에서 수행해야하는 일은 위임 로직으로 WAS에게 전달. (애플리케이션 로직은 가장 비싼 요소이다. 가장 중요한 애플리케이션 로직만 전담할 수 있다) ex) tomcat 정적 리소스가 많이 쓰이면 Web 서버 증설하고, 애플리케이션 리소스가 많이 쓰이면 WAS 증설 하는 것으로 효율적으로 리소스 ..

Spring boot

[JPA] Part 6 (객체지향 쿼리 언어 pt.2)

*김영한님의 JPA 기본편을 기반으로 작성하였습니다. jpql 경로 표현식 미리 보는 결론: "묵시적 join 사용하지말고 전부 명시하자!" ( 복잡한 db에서 묵시적 join이 발생 시, 인과관계 파악이 어려워진다. ) 상태 필드(state field): 경로 탐색의 끝, 탐색X ex) m.username. -> username이 마지막, 더 내려갈 수 없다. 단일 값 연관 경로: 묵시적 내부 조인(inner join) 발생, 탐색O select m.team from Member m; -> Member와 Team을 join 한 뒤, select(projection) 으로 team을 가져온다(묵시적 join 발생). 이와 같은 묵시적 join이 발생 되지 않게 주의하자. 컬렉션 값 연관 경로: 묵시적 내..

Spring boot

[JPA] Part 5 (객채지향 쿼리 언어 pt.1)

*김영한님의 JPA 기본편을 기반으로 작성하였습니다. JPA는 다양한 쿼리 방식을 지원한다. JPQL JPA Criteria QueryDSL 네이티브 SQL JDBC API 직접 사용, MyBatis, SpringJdbcTemplate 함께 사용 보통Jpql, QueryDSl로 쿼리를 짜고, 매우 복잡한 극소수의 쿼리들은 SpringJdbcTemplate을 통해 Native SQL로 구현 JPQL이란? JPQL은 Java Persistence Query Language의 약자로, 객체를 관리하는 Java Persistence API(JPA)의 일부분 JPQL은 객체 지향적인 방식으로 데이터베이스를 조회하고 조작할 수 있도록 해준다. JPQL은 SQL과 매우 유사하게 생겼지만, 객체를 대상으로 쿼리를 작성..

코앤미
'Spring boot' 카테고리의 글 목록 (5 Page)