인프런 워밍업 스터디 클럽 0기 BE - 1주차 발자국
강의 수강 내용
1) 학습 내용 정리
어노테이션 정리
1) @RestController
: 주어진 Class를 Controller로 등록할 때 사용 (Controller : API의 진입 지점 )
❗전달되는 데이터는 쿼리와 body, 이렇게 두 가지를 통해 전달됨.
2) @RequestParam
: 주어지는 쿼리를 함수 파라미터에 넣는다.
3) @RequestBody
: 주어지는 body를 함수 파라미터에 넣는다.
4) @GetMapping("/add")
: 아래 함수를 HTTP메소드가 GET이고, PATH가 /add 인 API로 지정할 때 사용.
* 메소드에 따라서 GET,POST,PUT,DELETE등 의 mapping이 있다.
body에 데이터를 담는 방법 : JSON(객체를 표기하는 기법)
👇 이렇게 다양한 타입의 데이터를 담아 객체로 전달할 수 있음{ "name": "아아아", "age": 99, "house": { "address": "대한민국 서울", "hasDoor": true } }
❗ 객체에 getter가 담겨 있으면, 반환할 때 JSON으로 응답이 나감.
spring에서 데이터 베이스 사용하기
Mysql에서 데이터를 변경하거나 가져오는 등을 수행하기 위해서는, sql쿼리를 활용해야 한다.
spring에서 그러한 쿼리를 mysql로 날려주는 역할을 하는것이 jdbcTemplate이다.@RestController public class UserController { private final JdbcTemplate jdbcTemplate; public UserController(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } @PostMapping("/user") public void saveUser(@RequestBody UserCreateRequest request) { String sql = "INSERT INTO user(name, age) VALUES(?, ?)"; jdbcTemplate.update(sql, request.getName(), request.getAge()); } }
위 예시 코드를 보면, sql 스트링 변수를 만들어 쿼리를 저장했다.
쿼리를 보면 값이 들어가야 할 자리를 ? 물음표로 넣는다.
jdbcTemplate.update는 sql에서 말하는 update를 의미하는게 아니고, 데이터 입력(INSERT),변경(UPDATE),삭제(DELETE)든 간에
update라는 메소드를 쓰는거다.
맨 앞의 인자에는 mysql로 날릴 쿼리를 입력하고, 이후 인자들에는 물음표에 들어갈 값들을 입력해주면 된다.
❗주의할 점은, SELECT만 jdbcTemplate.query 를 사용한다는 거다.
2) 나에게 피드백
-> 이번 주 잘한 점: 사실 이 스터디 신청한게 내 수준보다 좀 너무 높아서 문제였다. 자바 기초 문법만 공부하고 이걸 신청했는데, 생성자, getter, 객체 지향,, 클래스, 인스턴스 등등 모르는 개념이 너무 많아서 그냥 포기하려고 했다.
하지만 완주를 못하더라도 여기서 나오는 개념들을 그때그때 공부해서라도 따라가자는 생각에, 다른 자바 기본 강의를 병행하면서 내가 몰랐던 개념들을 학습해가며 미션을 수행했다.
결론적으로는 미션은 어느정도 잘하고 있다!!! 그래도 아직 모르는게 산더미라서..
다음주부터는 발자국에다가 그날그날 배운거를 바로 정리하는 용으로 쓰면서 복습을 해야겠다.
미션
: 미션 풀이
미션 1:
어노테이션이 무엇이고, 어노테이션을 만드는 방법에 대한 과제였다.
나는 어노테이션이라는 개념 자체가 너무 생소하기 때문에, 다양한 어노테이션들이 있지만
우선 강의에서 다뤘던 어노테이션들이 하는 역할에 대해 주로 정리했다.
https://velog.io/@aisha00/인프런-워밍업-스터디-클럽-0기-BE-1일차-과제
미션 2:
우리는 GET API와 POST API를 다루는 과제였다.
1번은 요청 값을 가지고 여러가지 연산을 수행해야 했기 때문에, 데이터를 받아오는 객체를 따로 만들어
거기서 연산을 수행하고 받아오는 식으로 코드를 짰다.
2번은 date값 한개만 쿼리로 가져오기 때문에, RequestParam 을 사용해 값을 바로 받아와서 문제를 해결했다.
3번은 요청을 받는 DTO에 리스트가 있으면 json을 받아올 수 있다는 힌트가 없었다면 못 풀뻔 했다. 아무튼 DTO를 만들어서 받아온 리스트 데이터를 리턴하고, 그 값을 for문을 돌려 누적합을 계산했다.
https://velog.io/@aisha00/인프런-워밍업-스터디-클럽-0기-BE-2일차-과제
미션 3:
람다식과 익명클래스에 대한 과제였다.
자바 문법도 잘 몰라서, gpt한테 람다식이 뭔지 익명클래스가 뭔지 진짜 상세하게 물어보니까 잘 알려줬다.
그러나 아직도 와닿는 개념은 아니여서 공부가 더 필요할 것 같다.
https://velog.io/@aisha00/인프런-워밍업-스터디-클럽-0기-BE-3일차-과제
미션 4:
mysql과 spring을 연동해 데이터를 다루는 api 과제였다.
2번은 그냥 id값만 문제에 나와있어서 어떤걸 해야 하는 과제인건지 처음에 헤맸는데,
db자체에 판매여부를 기록하는 칼럼이 있어야 할거 같아서 그것부터 테이블에 추가했다.
id를 받아서 isSell이라는 boolean타입의 판매여부 칼럼을 변경해주는 식으로 해결했다.
https://velog.io/@aisha00/인프런-워밍업-스터디-클럽-0기-BE-4일차-과제
미션 5:
제일 난해했던 과제였다. 뭔가 4번이랑 비슷한 맥락으로 내가 문제이해를 잘 못해서 헤맸던 것 같다.
문제에서 요구하는건 특정 과일이 판매된건 총 얼마고, 판매 안된건 총 얼마냐 이거를 알려달라는건데
나는 판매되지 않은 과일의 가격에는 어떤게 있고, 안 팔린거는 어떤게 있는지를 각각 리스트로 담아달라는 줄 알았다.
한참 고민하다가 뒤늦게 문제를 잘못 이해했음을 깨닫고,,,,
특정 과일에 대한 모든 정보를 List로 담아온 후, isSell 변수의 값을 확인해
팔린 과일의 총합과 팔리지 않은 과일의 총합을 나누어 누적값을 계산 했다.
https://velog.io/@aisha00/인프런-워밍업-스터디-클럽-0기-BE-5일차-과제
: 미션 수행 시 느낀점
1. 나는 감자다🥔
아무래도 제출에 급급하다보니, 강의해서 나온 방식을 그냥 그대로 따라하는 경향이 있었던 것 같다.
예를 들어, 받아오는 데이터가 한 갠데 굳이 객체로 감싸오는 과정을 추가하는 등 불필요한 클래스를 만들어
해결하려고 했던 접근 방식이 있었던 것 같다.
전반적으로 이해가 부족해서 그런 것 같은데, 코드를 다시 찬찬히 뜯어보면서 왜 굳이 이 코드를 작성했는가에 대한 의문을 품고 문제를 해결할 필요가 있어 보인다.
2. 나는 냅다 자꾸 문제에 머리부터 들이미는 경향이 있다.
오래걸렸던 문제를 생각해보면, 문제 이해를 애초에 대충하고 문제부터 풀려고 했던게 요인이였다.
실무에서 제일 중요한건 코드를 잘 짜는것도 맞지만, 요구사항에 맞는 코드를 짜지 않으면 아무 소용이 없다.
제일 중요한 걸 간과했던 거 같아서 다음주부터는 과제의 요구사항을 세심하게 이해하는 걸 명심해야겠다.
댓글을 작성해보세요.