전체 글
-
Spring-Security소프트웨어 및 프로그래밍/Spring 2025. 2. 13. 18:23
spring-security를 통해 로그인이 되는 방식이 궁금했다.spring-security에서는 어떻게 로그인 처리가 될까? 1. Spring Security 설정(SecurityConfig) @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http.formLogin(loginForm -> loginForm // 커스텀 form 방식 로그인 사용 .loginPage("/login") .defaultSuccessUrl("/index", true) ..
-
Spring JPA에서 연관관계 맵핑소프트웨어 및 프로그래밍/Spring 2025. 1. 11. 01:06
JPA는 데이터베이스의 테이블 간의 관계를 객체들 간의 관계로 추상화 해준다.JPA에서는 @Entity라는 어노테이션을 통해 객체를 하나의 테이블로 형상화할 수 있다. 그런데 테이블간의 관계는 객체간 관계와 동일하지 않기 때문에 연관관계를 이해하고 이를 적용해야 한다. 아래에 아주 간단한 예시를 통해 이러한 연관관계를 이해해 본다. 그림1과 같은 ERD가 있다. Order: 주문 정보가 담긴 테이블OrderItem: 주문에 포함된 상품 정보Delivery: 주문의 배송 정보 Order는 OrderItem과 1대 다 관계로 OrderItem이 Order의 id를 FK로 가지고 있다. 즉, OrderItem 측에서 order_id에 대한 조작이 가능한 '주인'이다. 그래서 Order와 OderItem을 ..
-
gRPC 클라이언트 서비스를 생성할 때 채널 상태를 우선 파악해야 할까?소프트웨어 및 프로그래밍/네트워크 프로그래밍 2024. 12. 6. 19:23
gRPC로 클라 프로그램을 작성할 때 든 생각이다. gRPC는 채널을 생성하고 stub에 서비스를 실행하니, 채널이 정상인지 아닌지 먼저 확인해야 되지 않을까? 채널 상태를 파악하고 서비스를 호출해야 조금 더 최적화 된 코드가 아닐까? 위와 같은 생각이 들어 구글링을 하던 중 좋은 글을 발견하였다 >> 글의링크 결론적으로 말하면 채널의 상태를 우선 파악할 필요가 없다.우리가 사용하는 gRPC의 Channel은 어플리케이션 레벨에서 추상화한 무엇이다. 실질적인 tcp 커넥션을 의미하지 않는다. 그러므로 아무리 Channel이 Ready 상태여도 서비스 호출에 무조건 100% 전달된다는 보장이 없다. 그러므로 우선 RPC 호출을 해봐야 서버의 상태로 실패를 하든지 네트워크로 실패를 하든지 RPC를 호출을 해..
-
프로세스의 상태 확인하는 방법카테고리 없음 2024. 11. 1. 15:33
현재 테스트 중인 api-gateway 처리량이 이상하다. 큐의 대기는 없는 것 같은데, 처리 대기시간은 증가를 하고 있다. 내 생각에 event-loop가 정상적으로 동작하고 있지 않은거 같은데 어떻게 확인할까? top / htop stracestrace -p [pid]리눅스 프로세스의 시스템 함수 호출에 대한 로그를 알 수 있음 iostat vmstat perf lsoflsof -i :{포트번호}리눅스에서 열린 파일 목록을 표시해주는 명령어로, "list open files"의 약자일반 파일뿐 아니라 네트워크 소켓, 디렉토리, 장치 등 시스템의 거의 모든 리소스를 포함 ss netstat ethtool
-
Spring(벡엔드)가 최종적으로 제공하는 것소프트웨어 및 프로그래밍/Spring 2024. 10. 14. 19:04
Spring 혹은 일반 벡엔드 개발자가 최종적으로 제공하는 것1. static 응답 - file, image, string...2. Http api 응답 - json3. 동적 응답 - 동적으로 Html 생성 더 알아둘 것두 가지 렌더링SSR - 서버 사이드 렌더링 동적 응답CSR - 클라이언트 사이드 렌더링자바스크립트를 사용해서 웹 브라우저에서 동적으로 생성해서 적용. ex) 네이버 지도동작 방식웹브라우저 >> 서버웹브라우저 sample.htmlHTML 내용X자바스크립트 링크웹브라우저 >> 서버Javascript 클라이언트 로직 요청HTML 렌더링 코드웹브라우저 >> 서버HTTP API 데이터 요청웹브라우저 Json 데이터 응답
-
Spring-Bean Container에 대한 예제와 이에 대한 후기소프트웨어 및 프로그래밍/Spring 2024. 10. 14. 16:18
예제에 대한 다이어그램은 아래와 같다SampleService 인터페이스와 ServiceA 인터페이스가 존재하고 SampleService의 구현체 SampleServiceImpl와 ServiceA의 구현체 ServiceAImpTypeOne, ServiceAImplTypeTwo 존재한다.SampleService에 대한 구동은 SampleServiceImpl에 구현되어 있고 SampleServiceImpl는 ServiceA를 멤버로 소유하고 있다. SampleServiceImpl의 멤버인 ServiceA에 대해 구현체를 new를 통해 바로 할당해서 사용해도 되지만, 아래와 같이 SampleServiceImpl이 ServiceA의 구현체에 의존하기 보다는 인터페이스인 ServiceA에 대해서만 의존하기 위해 코..
-
binary file의 이유로 grep이 파일 전체를 검색하지 못할때Linux/ubuntu 2024. 10. 7. 19:46
로그에 특정 문자열을 검색을 위해 grep을 사용하는데, 전체 로그 상에서 발견된 로그가 grep을 통해 추출한 로그에서는 발견 안 된 케이스가 존재했다. 추출한 파일에는 binary file ~ matches란 짧은 로그가 적혀 있었다. 이 때 어떻게 전체 파일을 서치할 수 있을까? grep에서 16진수로 표현된 문자열을 만나게 되면 검색을 하는 도중 중간에 멈추어 버린다. 그리고 그 이전에 서치했던 결과물만 결과로 넘어가 버린다. 이럴 경우 '--text' 옵션을 넣어주면 된다grep --text : 이진 파일을 텍스트 파일로 간주하고 검색을 수행하도록 지시 이렇게 하면 이진 파일도 텍스트 파일로 간주하여 지정한 패턴을 계속해서 수행하여 전체 파일을 검색할 수 있다.
-
Spring SOLID 원칙소프트웨어 및 프로그래밍/Spring 2024. 9. 24. 15:08
Spring은 OCP, DIP 기능 지원 DI - 의존관계, 의존성 주입 - 클라이언트 코드 변경 없이 SOLID SRP - 단일 책임 원칙 무언가 코드 상의 '변경'이 있을 때, 이 파급 효과가 적으면 이 원칙을 잘 따른것 예) MVC를 통해 model와 control, view를 각각의 역할을 분리 OCP - 개발-폐쇄 원칙 주관적으로 가장 중요한 원칙 소프트웨어 요소는 확장에는 열려있고 변경에는 닫혀있어야함 >> 다형성 MemberRepository m = new MemoryMemberRepository(); // 기존 MemberRepository m = new JdbcMemberRepository(); // 변경 확장을 하려면 코드를 '변경'해야만 함 이를 자동으로 해주려면 누군가가 개입이 ..