일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 이스티오
- Stack
- IntellJ
- thread
- 자바 ORM 표준 JPA 프로그래밍
- 보조스트림
- K8s
- MSA
- Collection
- Real MySQL
- Kotlin
- JPA
- OS
- 스프링
- 자바
- GC
- SpringBoot
- list
- spring
- Java
- 토비의 스프링
- redis
- 스트림
- Stream
- jvm
- 백준
- mysql
- 쿠버네티스
- gradle
- 토비의 스프링 정리
- Today
- Total
목록spring (15)
인생을 코딩하다.
이전 글에서는 CIA에 관한 설명과 CIA를 지키기 힘들 수 밖에 없는 이유에 관해 글을 작성했었습니다. 이번 글은 CIA를 지키기 위한 방법 RSA에 관해 글을 작성해보도록 하겠습니다. RSA란? RSA는 공개키 암호시스템의 하나입니다. 암호화 뿐만아니라 전자서명이 가능한 최초의 알고리즘으로 알려져있고,RSA가 갖는 전자서명 기능은 인증이 필요한 전자상거래 등에 광범위하게 사용되고 있습니다. RSA는 public key(공개키), private key(비밀키)가 존재합니다. 이것을 기반으로 이 전글에서 CIA를 지킬 수 없었던 문제에 관해 해결하는 법을 작성해보도록 하겠습니다. 우선 이전 글에서 A에서 B로 정보를 보낼 때, 정보 전달 문제 A에서 B로 정보를 보낼 때, C가 정보를 탈취해가는 것 누가..
안녕하세요. 오늘은 2차 캐시에 관해 정리한 내용을 작성해 보도록 하겠습니다. 그리고 2차 캐시에 관해 글을 작성하기에 앞서 우선 캐시와 JPA의 1차 캐시에 관해 잠시 설명해 보도록 하겠습니다. 🔍 캐시란 무엇이고, 캐시는 왜 사용하는 걸까요? Cache는 간단히 말해서 나중의 요청에 대한 결과를 미리 저장했다가 빠르게 사용하는 것입니다. 위로 갈수록 빠르고 비싸고 밑으로 갈수록 느리고 저렴한 저장소라고 생각하면 됩니다. Secondary Memory를 디스크 영역이라고 보시면 됩니다. 기본적으로 데이터는 컴퓨터가 꺼져도 저장이되어야 하기 떄문에 Secondary Memory(SSD,HDD 등)에 저장이 되는데, 기술이 발달하고 하드웨어들이 커지다보니깐 Main Memory나 Cache Memory, ..
프로젝트에서 이메일 중복 체크 관련해서 이슈가 하나 있었습니다. 클라이언트에게는 json으로 "이미 존재하는 이메일입니다."라고 예외를 전환해서 JSON 통신으로 알려줬습니다. 그런데 생각해보니 실제 서비스를 돌리고 있다고 가정하면, 클라이언트는 알 수 있지만 정작 서버를 만든 저는 알 수가 없었습니다. 알기 위해서는 콘솔창에 찍혀야했습니다. 그래서 Log로 서버에도 기록을 해야겠다는 생각이 들었습니다. 추가로 개발도구를 24시간 실행하고 있진 않을터이니 추후 슬랙으로 정보를 받을 수 있도록 만들어야 할 것 같다는 생각도 들었습니다.. 슬랙은 컴퓨터 앞에 앉아있지 않아도 폰으로도 계속 확인할 수 있을터이니.. 위에서 말한 이메일 중복체크 관련 외에도 동작상태나 상황등에 관해 디버깅이나 모니터링을 위해 정..
application.yml에 아래 로직을 다 구현했다고 가정해봅시다. // application.yml spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql: username: password: jpa: hibernate: ddl-auto: create-drop properties: hibernate: format_sql: true logging.level: org.hibernate.SQL: debug default Profile만 쓰면 어떤 문제점이 있을까요?? 아무런 테스트 없이 바로 개발서버, 실서버에 서비스를 배포하게 된다면 예기치 못한 장애와 버그들이 생길 수 있습니다. 예상치 못한 실수 등의 예를 하나 ..
1. 롬복은 왜 써야할까요 어노테이션 기반이기 때문에 코드 자동생성을 통한 생산성을 향상 시킬 수 있습니다. 그에 따라 반복되는 코드르 줄여 가독성 및 유지보수를 향상 시킬 수 있습니다. 추가로 빌더 패턴이나 로그 생성 등 다양하게 활용할 수 있습니다. 하지만 롬복에는 주의사항도 있습니다. @AllArgsConstructor,@RequiredArgsConstructor을 사용했을 떄, 필드 순서를 바꾸면 생성자의 순서도 바뀌는데, 기존 코드의 수정은 필요하지 않기 때문에, 개발자가 의도한 대로 동작하지 않아 버그가 생길 가능성이 큽니다. @Setter의 사용은 객체를 언제든지 변경할 수 있는 상태가 되어서 객체의 안전성이 보장받기 힘듭니다. @Data를 사용하면 모든 어노테이션을 한 번에 사용하기 떄문에..
첫 화면에서 로그인을 해야 기능을 사용할 수 있는 어떤 웹 사이트를 가정해보자.일반적으로 첫 화면에서 로그인을 하고, 나머지 기능들을 ui 클릭을 통해 사용할 것이다. 하지만, 어떤 사용자가 로그인을 해야만 하는 어떤 기능의 url을 복사해 뒀다가 로그인 없이 주소창에 그 url을 붙여넣는다면 어떨까? '별도의 처리' 가 없다면 아마 로그인 없이도 기능을 사용하게 되거나, 에러가 발생할 것이다. 그 '별도의 처리'가 포함된 로직은 일반적으로 아래와 같을 것이다. 1. 사용자는 로그인을 한다. 2. 시스템은 로그인한 사용자 정보를 세션에 저장한다. 3. 사용자는 기능을 요청한다. 4. 시스템은 사용자가 요청한 기능을 수행하기 전에 요청한 사용자의 세션을 체크한다. 5. 시스템은 올바른 세션일 경우 기능 승..
Servlet 웹 애플리케이션을 만들 때 필요한 인터페이스 Spring web MVC spring : Spring Framework에 있는 모듈 web : Web Service를 만들때 필요 MVC : MVC 패턴을 사용해서 (Model View Controller) 그리고 이 Spring web MVC가 Servlet를 사용하게 된다. Servlet은 왜 생겼을까? 정적 데이터만 전달하는 Web Server 처음에 웹 프로그래밍인 정적 데이터만 전달할 수 있었다. 어떤 사용자가 들어와도 Hello.html만 줄 수 있었다. 그래서 사용자(요청)에 따라 다른 처리를 해줄 수 없었다. 동적인 처리를 해주는 웹 애플리케이션이 없었다. 그래서 나온게 CGI다. 동적인 데이터를 처리하는 CGI, Web Serv..
AOP(Aspect-Oriented Programming)란? "형일, 회원가입 하는 시간 측정해서 로그로 남겨줄 수 있어요?" 난 회원가입 하는 서비스로 가서 시간을 측정해본다. 이렇게 객체로 분리하여 시간 측정을 하게된다. 그리고 log가 남는 것을 확인 할 수 있다. 그런데 이렇게 메서드에 스탑워트 기능을 추가하면 뭔가 이상하다. 스탑워치라는 시간을 재는 기능을 만들긴 했는데 서비스에 이 로직이 들어가는게 맞을까? 사실 여기서 필요한 핵심 로직은 위에 빨간색 박스에 있는 로직 아닐까? SRP에서 클래스를 변경하는 이유는 하나라고 했는데 여기에 서비스 로직 말고 위의 빨간 박스에 있는 로직들 처럼 부가기능이 들어간 것 같다는 생각을 할 수 있다. 사실 서비스에서 필요한 내용은 비즈니스 로직이라고 불리..