본문 바로가기

Dev12

[Spring] 어노테이션 뜯어보기 1편. @RestController 개요 세미나를 진행하면서 동료 개발자 분께 배운 꿀팁인데 바로 자바나 스프링의 코드를 하나씩 뜯어보는 것이다. 내가 이 동료분한테 배우고 싶은 점은 하나를 알더라도 깊이있는 지식을 가지고 있고, 그래서 문제 상황이 발생했을 때 되게 논리적으로 추론이 가능하다는 점이었다. 이러한 지식의 근원은 코드를 뜯어보는 것에서 나왔다는 걸 알게되었다. 단순히 Java의 String이 어떤 구조이고... HashMap은 어떤 구조이고 이런 문제가 아니라 Java의 HashMap은 OOO로 구현되어있으며, OOO를 위해서 XXX를... 실제 구현체는 A와 같은 방식이므로... 이런 구조가 나오는게 문제해결능력에 아주 큰 기여를 하고있었다. 따라서 스프링 어노테이션, 자바 자료구조 뜯어보기를 연재하기로 결정했다. 자바도 .. 2024. 1. 13.
[Backend] yaml 파일 작성법 😮‍💨 새로 CI가 필요한 프로젝트가 있어서 Cloud Build를 구축하는 도충 계속 아래와 같은 에러가 떴다. "failed unmarshalling build config cloudbuild.yaml: yaml: line 3: did not find expected key" yaml 파일 문법 에러가 발생한 것 yaml은 파이썬에서 tab으로 구분하듯이 띄어쓰기가 중요하다. 그런데 이러한 띄어쓰기 적용이 툴마다 달라서,,,, 아니 분명 intelliJ로 빌드할 땐 됐는데 외않되지?만 외치고 있다가 구글링을 통해 꿀정보 찾음 꿀정보는 아래 사이트인데, yaml -> json 변환 사이트로 yaml 문법이 잘못되면 잡아준다. https://www.json2yaml.com/convert-yaml-to-j.. 2024. 1. 11.
[spring] null 처리를 위한 spring의 Stringutils 개요 서버 단 코드를 구현할 때 null 처리를 미리 해주는 것이 중요하다. 특히 요청과 응답에 대한 코드를 모두 작성하면서, 서버 개발자가 미리 null 처리를 잘 해주면 불필요한 트랜잭션을 막을 수 있음을 알게 되었다. 또한 null이 들어오면 안 되는 상황에서 null을 활용함으로써 적절한 예외 처리를 할 수 있고, 버그를 방지할 수 있다. 굳이 강조하지 않아도 기본적으로 중요한 null 처리, java spring 개발자는 이 널 처리를 어떻게 하면 좋을까? Stringutils 문서 를 확인해보면 Stringutils는 spring framework에서 제공하는 String 타입에 대한 메소드다. StringUtils (Spring Framework 6.1.2 API) hasText Check .. 2023. 12. 21.
[spring] @Async와 SimpleAsyncTaskExecutor, TaskExecutor 그리고 thread pool @Async Asynchronous excution을 지원하는 스프링 어노테이션이다. 빈에 등록된 함수에 이 하지만 이러한 방식은 @Async 어노테이션을 적용하면 요청을 별도의 스레드(같은 Object data를 공유하는 스레드 중 하나)에서 실행한다. 이러한 Async 동작방식을 적용하여 호출자는 해당 메서드가 완료되는 것을 기다릴 필요가 없다. public interface EmailService { @Async void sendEmail(String template, Map properties); } → 위 예시에서 sendEmail 메소드는 별도의 스레드에서 실행된다. Spring’s @Async annotation, indicating that it should run on a separate.. 2023. 10. 11.
[Backend] 객체 지향 특징 | 다형성 | 좋은 객체 지향 설계 5 가지 원칙(SOLID) | EJB The hell of EJB…. EJB(Enterprise Java Beans): 자바당 정파 기술 이론은 좋은데 실무적으로 사용하기에 복잡하고 힘들면서, 느리다. Spring(스프링) EJB 컨테이너 대체 Hibernate EJB 엔티티빈 기술을 대체 JPA 새로운 표준 정의 객체 지향 특징 추상화, 캡슐화, 상속, 다형성 객체지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 “객체”들의 모임으로 파악하고자 하는 것이다. 각각의 개체는 메시지를 주고 받고, 데이터를 처리할 수 있다. ⇒ 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 sw 개발에 많이 사용된다. 유연하고, 변경이 용이하다? 레고 블럭 조립하듯이 부품을 갈아 끼우듯이 컴포넌트.. 2023. 7. 19.
[JPA] 단방향 연관관계 매핑 | 테이블 중심 설계와 객체 지향 중심 설계 | Entity Mapping annatation으로 erd에 명시된 Entity와 Column들을 어떻게 JPA에서 선언하는지에 대해서 잘 배웠다. 그럼 이제 각각의 Entity에 대해서는 Ok니까 그 Entity 간의 관계를 표현해주는 코드를 구현해야 한다. 여기서부터는 객체지향적인 사고가 필요하다. 왜냐하면 테이블은 외래 키로 조인을 사용해서 연관된 테이블을 찾지만, 객체는 참조를 통해 연관된 객체를 찾기 때문이다. Member와 Team이라는 두 Entity가 있다고 가정하자. Team은 여러 개의 Member 객체를 가질 수 있으므로 두 Entity간 관계는 다음과 같다. Member : Team = N : 1 이때 Member 엔티티 클래스와 Team 엔티티 클래스를 데이터 중심으로 모델링하여 연관관계를 찾으면 외래 키 식.. 2023. 5. 5.
[JPA] 기본 키 매핑 | PK 기본 키 매핑 @Id // pk 매핑 @GeneratedValue(strategy = GenerationType.AUTO) private String id; @GenerateValue 어노테이션에 위와 같은(strategy = GenerationType.AUTO) 세팅을 하면, db에서 말하는 auto ingredient가 설정된다. 이때 JPA 기본 설정 파일 persistence.xml의 속성에는 none이나 update로 설정해주어야 한다. (당연함 값을 자동으로 + 해주는 거니까) 💡 String 보다는 Int, Int 보다는 Long Identity 주로 MySQL에서 사용하는 방식으로 기본 키 생성할 때 데이터베이스에 같이 위임하는 것이다. auto_increment는 db에 INSERT SQ.. 2023. 5. 4.
[JPA] 환경 세팅 | JPA 설정 파일 | 기초적인 것 구현하면서 동작 과정 이해하기 intelliJ, start.io.spring으로 spring 프로젝트를 생성한 후에 JPA를 활용하기 위해서 초기에 설정해둬야 하는 것들에 대해 정리하는 글이다. Persistence.xml JPA 설정 파일이다. 우리가 사용할 database에 대한 정보를 작성하는 파일으로, 위치는 반드시 /resources/META-INF/persistence.xml으로 설정해야 한다. 예시 코드는 아래와 같다. javax.persistence: JPA 표준 속성 hibernate: 하이버네이트 전용 속성 JPA 구동 방식 위에서 설정한 JPA 설정 파일로 설정 정보를 조회하고, EntityManagerFactory로 Entity를 생성한다. package hellojpa; import javax.persisten.. 2023. 5. 2.
[Backend] RESTful API란, API와 Interface REST/Restful API란? REST 아키텍처 스타일의 디자인 원칙을 준수하는 API다. REST 디자인 원칙 균일한 인터페이스 클라이언트-서버 Stateless 캐싱 가능성 코드 온디맨드 HTTP URI를 통해 자원(resource)을 명시 해당 자원에 대해 HTTP 메소드를 활용해서 CRUD 기능을 수행 HOW TO UNDERSTAND API REST REST/RESTful API 에 대한 이해가 기반되어야 한다. Interface(상호의 얼굴 😃) (사전상) 컴퓨터 프로그램이 user와 주고받는 정보를 나타내는 방법 메뉴/스크린의 레이아웃 GUI(Graphical User Interface): 사용자가 편리하게 사용할 수 있도록 컴퓨터의 어떠한 기능을 아이콘 따위로 나타낸 것 (결론) 어떤 두.. 2023. 3. 29.
[백엔드/인터넷] DNS/DNS 작동원리 -DNS(Domain Name System)란? 인터넷 상의 도메인 네임(ex. google, naver...)을 실제로 접속 가능한 주소로 식별해서 찾을 수 있게 하는 서비스이다. 예를 들어, http://www.12345.com 이라는 URL을 웹 브라우저에서 입력하면 인터넷상의 www.12345com에 해당하는 실제 IP 주소를 반환한다. 실제 웹 브라우저 시스템은 도메인 네임 그 자체가 아닌, 반환된 IP 주소를 통해서 목적 서버에 접속한다. 쉽게 말해서 우리가 어떤 웹 사이트에 접근할 때 네이버.com 입력 후 클릭으로 쉽게 접근하는 것처럼 보이지만 사실 내부에서는 도메인 네임에 해당하는 IP 주소가 반환되고 이 주소를 통해서 네이버의 서버에 접속하는 과정을 거친다. 여기서 DNS가 이름과 IP.. 2023. 1. 19.
[백엔드/인터넷] 쿠키와 세션, HTTP의 stateless. HTTP는 클라이언트에게 요청을 받고, 그에 대한 응답을 한 뒤 접속을 끊는다는 특징이 있다. 따라서 클라이언트의 상태를 알 수 없다. HTTP의 특징인, stateless이다. 하지만 우리가 일상 속에서 사용하는 웹을 떠올려보자.. 티스토리에 글을 올릴 때 로그인을 하고, 내 티스토리 주소에서 원하는 카테고리를 선택하기도 한다. 이는 클라이언트 즉 작성자의 상태 정보를 알고있는 것이다. HTTP는 stateless 한데, 어떻게 클라이언트의 정보를 알고 있을까?? 이럴 때 쓰이는 게 바로 쿠키와 세션!먼저, 쿠키에 대해 알아보자 🍪 쿠키는 클라이언트가 웹 사이트를 방문할 때 장치에 저장되는 작은 문자 및 숫자 기록 파일이다. 클라이언트 식별과 같은 인증에 가장 많이 쓰인다. 서버가 HTTP 응답 헤더의.. 2023. 1. 15.
[백엔드/인터넷] 서버와 HTTP, TCP 서버 관리자. 웹 실행의 모든 것을 처리함. 웹 실행이라함은 클라이언트의 요청. 서버는 클라이언트 요청을 수신하고 필요한 로직을 실행하며 통신 프로토콜(ex. HTTP)를 통해 응답을 반환한다. 리소스란? 문서, 이미지, 임시 서비스 등과 같은 모든 정보. 클라이언트가 요청을 할 때 거치는 과정. 서버가 실행되는 동안 필요에 따라 동적으로 할당되므로, 서버 측에서는 리소스 사용량을 모니터링하고 관리하여 시스템의 안정성과 성능을 유지. HTTP(HyperText Trancfer Protocol)란? 프로토콜은 백앤드-1 과정에서 '컴퓨터나 통신 장치가 소통하는 규칙'이라고 배웠다. HTTP는 프로토콜 중 하나다. HTTP는 웹에서 이루어지는 데이터 교환(클라이언트와 서버간) 프로토콜이다. HTTP serv.. 2023. 1. 15.