[인프런 워밍업 클럽 0기] 1주차 발자국

[인프런 워밍업 클럽 0기] 1주차 발자국

워밍업클럽에 참여한 이유

  • 서버 배포 경험을 쌓기 위함입니다. 국비학원에선 선생님의 도커 서버를 통해 프로젝트를 배포했습니다. 그렇기에 저만의 운영 서버를 통해 프로젝트를 배포하고 싶었습니다.

  • 함께 공부하는 사람들의 모습을 보며 자극을 받고 싶었습니다.

 

이번 주에 배운 내용

  • 스프링 이니셜라이저를 이용해 스프링 부트 프로젝트를 만들고 실행하였습니다.

  • @SpringBootApplication을 통해 어노테이션의 개념과 역할을 이해했습니다.

  • 서버의 개념과 역할을 파악하고 데이터 통신에 필요한 네트워크 환경, HTTP 프로토콜, API 개념을 배웠습니다.

  • 유저를 조회하는 API를 개발했습니다.

    • 컨트롤러에서 응답 결과를 그대로 (객체) 반환하면, 내부에서 JSON으로 변환되어 HTTP 메세지 body에 담깁니다. 이때 객체에는 getter가 있어야 합니다.

  • 디스크와 메모리의 차이를 이해하고, 스프링 부트의 데이터 접근 기술을 이용해 애플리케이션 서버에서 DB로 데이터를 저장하는 법을 배웠습니다.

  • 클라이언트의 요청이 적절하지 않을 때 API 예외를 일으키는 법을 배웠습니다.

  • 클린 코드의 중요성을 이해하고, 이를 기반으로 컨트롤러를 분리했습니다.

    • 컨트롤러 - 서비스 - 레포지토리

     


미션

[1일차 - 어노테이션]

  • 링크: https://www.inflearn.com/blogs/6541

  • 어노테이션을 사용하는 이유: 컴파일 시점에 에러를 확인할 수 있다. //에 비해 더 나은 정보를 제공한다.

  • 나만의 어노테이션 만들기

     

    package playground.myannotation; 
    @Target(ElementType.PARAMETER) 
    @Retention(RetentionPolicy.RUNTIME) 
    public @interface MyAnnotation {
    }

 

[3일차 - 람다식]

  • 링크: https://www.inflearn.com/blogs/6651

  • Java의 람다식: 함수를 하나의 식으로 표현한 것으로, 함수형 인터페이스를 구현하는 용도로 자주 쓰인다. 익명 클래스의 구현 과정을 보다 간결히 나타낼 수 있다.

public class MyLambdaExpression2 {
    public static void main(String[] args) {
        Runnable runnableByAnonymous = new Runnable() {
            @Override
            public void run() {
                System.out.println("익명 클래스로 구현했습니다");
            }
        };

        Runnable runnableByLambda = () -> {
            System.out.println("람다식으로 구현했습니다");
        };
    }
}

 

[4일차 - 과일 API 개발]

  • 링크: https://www.inflearn.com/blogs/6687

  • 문제 3 - 특정 과일을 기준으로 팔린 금액, 팔리지 않은 금액 조회: 4일차 미션의 하이라이트로, 아래의 ResultSet을 갖고 { "salesAmount": 6000, "notSalesAmount": 4000 }를 어떻게 만들지 고민했습니다.

image

 

[5일차 - 리팩토링]

  • 링크: https://www.inflearn.com/blogs/6715

  • 문제 - 주사위의 숫자가 6, 8, 12로 바뀔 수 있다면

    • 입력값을 받는 부분을 메소드로 추출했습니다.

    • 기록 횟수를 배열로 관리했습니다.

    • 주사위 숫자와 도전 횟수를 임의로 받을 수 있도록 했습니다.

       

     

    public class Main {
        private static final Scanner scanner = new Scanner(System.in);
    
        public static void main(String[] args) {
            int number = readInput("주사위 숫자를 입력하세요 : ");
            int attempts = readInput("도전 횟수를 입력하세요 : ");
    
            int[] counts = new int[number];
            for (int i = 0; i < attempts; i++) {
                int diceNumber = (int) (Math.random() * number) + 1;
                counts[diceNumber - 1]++;
            }
    
            for (int i = 0; i < counts.length; i++) {
                System.out.printf("%d는(은) %d번 나왔습니다.\n", i + 1, counts[i]);
            }
    
            scanner.close();
        }
    
        private static int readInput(String message) {
            System.out.print(message);
            return Integer.parseInt(scanner.nextLine());
        }
    }

     


회고

국비학원을 다닐 땐 응답 결과를 웹 페이지로만 전달하다 보니 API 개발은 다소 생경했습니다. 그렇지만 한 단계 성장한 것 같아 이런 내가 싫진 않은 느낌? API 설계에도 익숙해져서 얼른 서버 배포를 해보고 싶네요.

 

역시 함께 하면 멀리 간다고, 워밍업클럽에 참여한 러너들을 보며 많은 자극과 도움을 받았습니다. 강의에서 배운 걸로 끝내지 않고 주도적으로 공부할 내용을 찾아 나가는 모습에 저 또한 공부 방향을 재설정할 수 있었습니다.

 

오늘도 함께 스터디 중인 여러분들을 존중하고 존경하며 여기서 마무리하도록 하겠습니다.

댓글을 작성해보세요.

채널톡 아이콘