프로그래밍 114

[스프링] 8. JPA

JPA (Java Persistence API) 현재 자바에서 ORM기술 표준으로 알려져 있다. 스프링만을 위한 것은 아니고 자바 전반적으로 사용되는 듯 하다. 지난 시간 도메인 객체를 만들 때 Id, GeneratedValue, Entity 어노테이션이 그 예이다. 메소드명 의미 save 객체 하나를 삽입한다. saveAll 여러개의 객체를 동시에 삽입한다. findById 특정 Id를 가진 객체를 검색한다.(Optional로 반환) findAll 테이블에 존재하는 모든 객체를 검색한다. deleteById 해당하는 Id를 가진 객체를 삭제한다. deleteAll 모든 객체를 삭제한다.(위험) delete 해당 객체를 삭제한다. deleteAllInBatch 모든 객체를 삭제하는데 한번의 SQL만 호출..

[알고리즘] Codeforces Round #811 (Div. 3)

오랜만에 코드포스 컨테스트 글을 올려보려고 한다. rated대회는 무서워서 못치겠고 버추얼을 돌리면서 실력을 키우고 도전하려고 한다.(그리고 파란색이 너무 예뻐서 유지하고 싶다.) Codeforces Round #811 (Div. 3) A - Everyone Loves to Sleep [Solved!] 현재 시간이 주어지고 $n$개의 시간이 주어질 때 현재 시간 이후의 시간 중 가장 빠른 시간과의 차이를 구하는 문제이다. 시간을 분으로 고쳐서 정렬한 후 완전탐색 해서 구하면 된다. 다만 현재 시간이 주어진 시간보다 뒤일 수 있으므로 주어진 시간중 가장 빠른 시간에서 $24 \times 60 = 1440$을 더해 맨 뒤에 추가한 후 탐색한다. B - Remove Prefix [Solved!] 앞에서부터 몇..

[스프링] 7. Object Relational Mapping

지난시간에 DTO를 위해 Object Mapping이 자동적으로 적용된다는 사실을 알게 되었다. Object Mapping은 데이터 전송을 위한 객체를 json으로 변환해주는 작업이었는데 이번엔 데이터베이스에 자동으로 매핑해주는 Object Relational Mapping(ORM)을 알아보려고 한다. Object Mapping : Object $\leftrightarrow$ Json Object Relational Mapping(ORM) : Object $\leftrightarrow$ Relation(Table) ORM을 모르는 상태라면 데이터베이스를 조작하기 위해 SQL문법을 배우고 직접 사용하며 해당 언어와 데이터베이스를 연결하는 라이브러리를 알아야 한다. (실제로 내가 ORM을 몰라서 School..

[스프링] 6. 테스트코드 작성

지금까지는 코드 작성이 정상적으로 실행되는지를 서버를 켜고 API를 요청하는 방법으로 확인했다. 확실하긴 하지만 사람이 테스트한다는 점에서 귀찮음이 있다. 코드를 통해서 자동화하는 방법을 알아보고자 한다. // controller/ApiController.java @RestController @RequestMapping("/api") public class ApiController { @GetMapping("/") public String hello(){ return "Hello"; } } 간단한 코드를 하나 작성했다. 클래스 안에 커서를 두고 Ctrl + Shift + T를 누르면 테스트코드 작성 창이 나온다. 확인을 누르면 테스트 폴더에 같은 레벨의 폴더에 테스트 코드가 만들어진다. // test/c..

[알고리즘] UCPC 2022 본선 후기

인생에서 마지막 UCPC를 후회없게 마무리했다. 최근 3개년 UCPC본선 문제를 확인해보니 한문제가 골드급이고 나머지는 플래급 이상이어서 한문제만 풀자라는 느낌으로 참가했는데 생각보다 쉬운 문제가 꽤 있어서 재미있게 풀었던 것 같다. 대회는 삼성 스페이스쉐어에서 진행됐고 티셔츠와 식사, 간식거리가 무한제공 되었다. 또한 많은 후원사의 기념품도 받아왔다. Before Contest 자리배치가 왼쪽같을 줄 알았는데 오른쪽모양 배치여서 살짝 부담스러웠다. 11시 시작이었지만 모종의 이유로 5분이 미뤄졌고 뭔가 앞에서 통제를 해야할 것 같은 분위기였는데 4분까지 아무 통제가 없어 어수선하다가 5분에 시작됐다. During Contest 00:00 문제가 12문제여서 각각 4문제씩 보기로 하고 내가 A~D를 읽기..

[스프링] 5. Lombok

지난시간 데이터를 주고 받기 위해 DTO클래스를 생성했다. 자바는 코틀린과 달리 data키워드를 제공하지 않기 때문에 getter, setter, constructor, toString같은 메서드들을 직접 구현해야 했다. IDE레벨에서 지원하긴 하지만 멤버변수가 늘어날 때마다 직접 추가하기 불편하다. 이럴때 롬복(Lombok)을 사용하면 편리하다. DTO // dto/StudentDTO.java public class StudentDTO { int id; String name; public StudentDTO(int id, String name) { this.id = id; this.name = name; } public int getId() { return id; } public void setId(i..

[스프링] 4. Object Mapper

지난시간에 api를 만들어서 string데이터를 주고 받았다. 지난시간에도 말했듯이 오직 string만 주고 받는 일은 거의 없고 여러 데이터를 포함해서 보낸다. 예를들면 학생을 요청할때 학번, 이름, 학과등을 모아서 보내는 경우가 있다. api는 서로 다른 언어끼리도 통신할 수 있는데 서로 객체를 표현하는 방식이 다르기 객체를 직접 보낼 수 없다. 객체를 문자열(json)로 바꿔서 전송하고 그 문자열을 객체로 바꿔서 수신한다. 여기서 객체와 문자열을 바꾸는 역할을 Object Mapper가 한다. 객체 -> Object Mapper -> json -> Object Mapper -> 객체 DTO 전송될 객체를 DTO로 나타낸다. DTO는 Data Transfer Object의 약자이고 송신측과 수신측의 ..

[스프링] 3. REST API 만들기

우리는 REST API를 통해 CRUD를 구현할 수 있다. CRUD는 Create, Read, Update, Delete이고 각각 http method에서 POST, GET, PUT, DELETE에 대응된다. 리소스를 생성하는데 GET을 써서 구현해도 동작이야 하겠지만 이것 또한 개발자들간의 합의(?)같은 것이기 때문에 일치시키는게 좋다. HTTP Method 지난시간에 GetMapping을 통해 GET을 구현했다. {method}Mapping어노테이션을 사용하면 해당하는 메소드를 구현할 수 있다. // controller/ApiController.java @RestController public class ApiController { @GetMapping("/api/hello") public Strin..

[스프링] 2. 첫 api 만들기

스프링은 api 서버로 사용이 가능하다. request를 받으면 "Hello world"를 반환하는 코드를 작성해보자. Controller 스프링은 request를 Controller에서 받고 클래스를 정의해줘야 한다. Controller는 프로젝트 폴더 안에 controller라는 패키지를 만들고 Controller라는 접미사를 가진 클래스명으로 사용하는 것이 국룰인듯 하다. // controller/ApiController.java @RestController public class ApiController { @GetMapping("/api/hello") public String hello(){ return "Hello world"; } } @RestController : 이 컨트롤러는 Rest요청..

[스프링] 1. 스프링 시작하기

Prologue 지금까지 스프링 공부 시도를 3번쯤 한 것 같은데 계속 까먹어서 블로그에 글을 남기면서 공부하려고 합니다. 초보자의 입장에서 바라본 스프링을 작성한 카테고리이니 잘못된 점 지적 환영합니다. 스프링 우리나라 기업들은 자바를 상당히 많이 사용한다. 그중에서도 전자정부프레임워크와 수많은 레거시 코드들이 스프링으로 이루어져 있다. 그만큼 역사가 깊고 스프링이 견고하다는 뜻인 것 같다. 나는 지금까지 자바를 잘 몰라서 스프링 말고 다른 프레임워크(장고, fastapi, express 등)를 공부해 왔지만 스프링도 배워둬야 할 것 같아서 공부를 시작하게 되었다. 프로젝트 만들기 인텔리제이에서 프로젝트 만드는 방법은 간편하다. 1. 새 프로젝트 2. 프로젝트 설정 Spring Initializr를 선..