[Spring] PDFBox 로 텍스트 추출시 null 값이 추출될 때
·
개발 ━━━━━/Spring(boot)
문제PDFBox 를 이용해서 이력서 형식의 PDF (잡코리아, 사람인) 에 있는 텍스트를 출력하는데public String extractPDF(MultipartFile file) { try (PDDocument document = PDDocument.load(file.getInputStream())) { PDFTextStripper stripper = new PDFTextStripper(); stripper.setSortByPosition(true); String content = stripper.getText(document); } catch { } 잡코리아는 null 문자 없이 정상적으..
[Spring] Singleton, Prototype Scope Bean
·
개발 ━━━━━/Spring(boot)
김영한 강사님의 스프링 강의를 보던 중 Singleton, Prototype 에 대한 내용이 나온 적이 있다. ServiceController@Controllerpublic class ServiceController { private final ApplicationContext context; @Autowired public ServiceController(ApplicationContext context) { this.context = context; } @GetMapping("/") public String getServiceHashes(Model model) { SingletonService singletonService = context.ge..
[Spring] 이전 데이터를 불러올때 stream문과 for문의 성능 차이 테스트 - 1
·
개발 ━━━━━/Spring(boot)
Spring 프로젝트에서 Websocket 을 이용한 채팅 기능을 구현하였다. 주고 받는 채팅 메세지들은 DB 에 저장이 되고, 채팅방에 입장시 이전 메세지들이 stream 문으로 불러와진다. stream 문 보단 for 문이 더 익숙한 나로선 실시간성이 중요한 채팅에서 stream 문과 for 문으로 각각 구현시 유의미한 성능 차이가 있을지 문득 궁금해졌다. 채팅 메세지들은 MySQL 과 Redis 에 저장되고 있고 Redis 에서만 불러오게끔 되어 있었는데 프로젝트를 진행하면서 이런 저런 테스트를 진행하다 보니 인메모리 데이터베이스인 Redis 에 있던 데이터들이 자꾸 날아가는 상황이 발생하였다. 그래서 채팅 메세지 불러오는 로직을 Redis 에 데이터가 있을 때) 1. Redis 데이터랑 MySQL..
[Spring] WebSocket 을 이용한 채팅 구현
·
개발 ━━━━━/Spring(boot)
WebSocket 이란 서버가 응답하고 연결을 종료하는 단방향 통신인 http 통신과는 달리 Server 와 Client 의 연결이 지속적으로 유지되는 양방향 통신을 하는 방식인 socket 통신이다. 접속까지는 HTTP 프로토콜를 이용하고 그 이후에는 자체적인 Websocket 프로토콜을 이용한다. Springboot 에 Websocket 서버 구축 build.gradle 에 의존성 (Dependency) 추가 dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-websocket' compileOnly ..
[Spring] Entity 관계
·
개발 ━━━━━/Spring(boot)
1 대 1 관계 단방향 관계 Entity에서 외래 키의 주인은 일반적으로 N(다)의 관계인 Entity 이지만 1 대 1 관계에서는 외래 키의 주인을 직접 지정. 외래 키 주인만이 외래 키를 등록, 수정, 삭제할 수 있으며, 주인이 아닌 쪽은 오직 외래 키를 읽기만 가능 // 음식 Entity @Entity @Table(name = "food") public class Food { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private double price; @OneToOne @JoinColumn(name = "user_id") private User user; } // 고객 ..
[Spring] Filter
·
개발 ━━━━━/Spring(boot)
Filter Spring Security - Filter Chain 기반에서 동작 UsernamePasswordAuthenticationFilter는 Spring Security의 필터인 AbstractAuthenticationProcessingFilter를 상속한 Filter입니다. 기본적으로 Form Login 기반을 사용할 때 username 과 password 확인하여 인증합니다. 인증 과정 사용자가 username과 password를 제출하면 UsernamePasswordAuthenticationFilter는 인증된 사용자의 정보가 담기는 인증 객체인 Authentication의 종류 중 하나인 UsernamePasswordAuthenticationToken을 만들어 AuthenticationM..
[Spring] 인증 방식 (쿠키-세션, JWT)
·
개발 ━━━━━/Spring(boot)
Bean Bean 이 적용된 Class 가 여러 개일 경우 @Autowired Food food; 하면 에러 발생 Food chicken; Food pizza; 1. 객체를 따로 선언해준다. 2. @Primary 어노테이션을 붙여준다. (범용적으로 사용되는 객체) 3. @Qualifier("pizza") 를 해당 클래스, Food 객체 선언할 때 붙여준다. (Primary 보다 우선순위가 높음, 지역적으로 사용되는 객체) 인증 (Authentication) 과 인가 (Authorization) 인증 vs 인가 인증 - 해당 유저가 실제 유저인지 인증하는 개념 인가 - 해당 유저가 특정 리소스에 접근이 가능한지 허가를 확인하는 개념 인증 방식 쿠키-세션 방식 서버가 '특정 유저가 로그인되었다'는 상태를 저..