Java, Spring Boot

calis_ws·2023년 6월 5일
0

Java와 IDE

Low Level Language

  • 가독성이 매우 떨어진다.
  • 컴퓨터 구조에 대한 지식이 해박해야 사용할 수 있다.
  • 사용하는 컴퓨터(CPU)에 따라 작성해야 하는 코드가 다르다(!)

기계어

CPU가 입력받아 해석할 수 있는, 0과 1로 이루어진 명령어

어셈블리어

기계어와 대응되는, 인간이 읽을 수 있는 형태의 프로그래밍 언어

High Level Language

  • 일반적으로 인간이 이해하기 더 편하고, 가독성이 높다.
  • 많은 단계에 추상화가 이뤄져서 컴퓨터 구조에 대하여 비교적 알아야 할 내용이 적다.
  • 결과적으로 생산성이 더 높아진다.


High Level Language 자체를 CPU가 직접 실행할 수는 없다!

Java와 JVM

Java 언어를 ‘컴파일’하면 Java Bytecode 라는게 나온다.
Java Bytecode는 쉽게 생각하면 JVM을 위한 어셈블리어.
JVM은 Java Bytecode를 CPU가 이해할 수 있는 기계어로 번역한다.

JDK와 JRE

우리가 작성한 Java 코드를 Java Bytecode로 변환하기 위해서 JDK(Java Development Kit)를 활용한다.

  • Java를 개발하기 위한 도구 모음집
  • Java 언어를 Java Bytecode로 변환하는 컴파일러(javac)
  • Java Bytecode를 실행해보기 위한 JVM 등

Java로 만들어진 프로그램을 사용하기 위해선 JRE

  • JRE : JVM과 JVM이 사용할 기타 라이브러리를 포함한, Java로 작성된 프로그램의 실행 환경

Client ‒ Server Model

클라이언트

  • 인터넷에 연결된 장치 혹은 소프트웨어 프로세스
  • 서비스를 요청하는 주체

서버

  • 사용자에게 전송될 데이터(웹 페이지, 이미지 등) 또는 기능이 저장된 컴퓨터 또는 프로세스
  • 요청에 대한 적당한 응답을 하는 주체

프론트엔드와 백엔드

  • 상황에 맞는 데이터를 요구, 제공된 데이터를 사용자가 알아보기 쉽게 만드는 클라이언트에 집중하는 개발자 → 프론트엔드 개발자
  • 요청의 적합성 여부의 판단, 요청에 따른 알맞는 데이터를 가공, 데이터 관리와 서버에 집중하는 개발자 → 백엔드 개발자

URL (Uniform Resource Locator)

  • Scheme : 어떤 방식으로 요청을 하는지
  • Authority : 어떤 컴퓨터에 요청을 하는지
  • Path : 그 컴퓨터의 어디에 있는 자원인지
  • Query : 그 자원에 대한 추가 요구 사항

백엔드 개발자가 할 일

  • 클라이언트 – 서버 구조에서 서버를 만드는 것
  • 어떤 요청을 받았을 때, 특정 응답을 반환하도록 하며 그 데이터를 관리 하는 것
  • 즉 어떤 URL을 기준으로 요청이 들어왔을 때 어떤 응답을 전달할지, 그 중 특히 Path와 Query를 기준으로 어떤 응답을 할지!

프레임워크의 역할

개발자의 일을 간소화하자!

  • 어떤 URL에서 어떤 요청을 들을 것인지
  • 그 요청에 대한 응답 형태가 어떨 것인지 비즈니스 로직만 다시 생각하면 되게끔 반복된 기능을 만들어두자
  • 개발에 필요한 기능들을 미리 구현해 놓은 것 = Framework
  • Spring Boot는? 웹 서비스 개발을 위한 Framework

Spring Boot 시작하기

Controller로 HTML 전달

  • @Controller : 이 클래스는 Controller 임을 나타내는 어노테이션
  • @RequestMapping : 이 메소드는 특정 요청이 발생했을 때 실행이 되는 메소드임을 나타내는 어노테이션
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class DemoController {

    @RequestMapping("home")
    public String home() {
        return "home.html";
    }

    @RequestMapping("profile")
    public String profile() {
        return "profile.html";
    }

    @RequestMapping("blog")
    public String blog() {
        return "blog.html";
    }
}

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<p>
    <a href="http://localhost:8080/profile">프로필 주소</a>
</p>
<p>
    <a href="http://localhost:8080/blog">블로그 주소</a>
</p>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Profile</title>
</head>
<body>
<h3>나의 프로필</h3>
<h3>이름 신우석</h3>
<h3>나이 비밀</h3>
<h3>성별 비밀</h3>
<h3>결혼유무 미혼</h3>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
우스기의 블로그다 임마
</body>
</html>

Inversion of Control

일반적인 객체지향 프로그래밍

  • 개발자는 클래스를 정의한다.
  • 클래스 인스턴스는 서로 상호작용 하면서 기능을 제공한다.
  • 개발자는 자신이 제공하고자 하는 기능을 위해 적당한 시점에 클래스를 객체로 생성하고 배치하고 사용해야 한다.

지금 우리가 한 일은?

  • DemoController를 만들고, 이 클래스에 @Controller임을 나타냈다.
  • home(), profile()을 만들고 이 메소드에 @RequestMapping임을 나타냈다.
  • SpringApplication.run()을 실행하니, 우리가 작성한 코드가 어느 시점에서 실행이 되는것만 같다.
  • 객체를 우리가 직접 만들지 않는다!

Spring의 IoC Container

  • 개발자가 작성한 클래스와 몇가지 설정 정보를 바탕으로,
  • 해당 클래스 객체의 Lifecycle을 관리하는 Spring의 IoC 패턴 구현체
  • Spring Container, ApplicationContext로 지칭되기도 한다.
  • 이때 IoC Container가 관리하는 객체를 Bean이라 부른다.

인사이트 타임

개미 군단

https://school.programmers.co.kr/learn/courses/30/lessons/120837

class Solution {
    public int solution(int hp) {
        int hardAnt = 5;
        int normalAnt = 3;
        int easyAnt = 1;
        
        return hp / hardAnt + hp % hardAnt / normalAnt + hp % hardAnt % normalAnt / easyAnt;
    }
}

자릿수 더하기

https://school.programmers.co.kr/learn/courses/30/lessons/120906

class Solution {
    public int solution(int n) {
        return n / 1000000 + n % 1000000 / 100000 + n % 100000 / 10000 + n % 10000 / 1000 + n % 1000 / 100 + n % 100 / 10 + n % 10 / 1;
    }
}

review

오랜만에 TIL을 작성한다. 그동안 강사님의 교체로 인해 특강으로만 수업을 진행했어서 작성을 미뤘다. 오늘은 새로오신 강사님과 자바부터 스프링의 이론에 대하여 짧게 맛을 보았다. 크게 어려운건 없었지만 계속해서 자바와 스프링의 개념을 익히는게 좋을 것 같다.

인사이트 타임에는 어렵지 않게 풀 수 있었다. 그동안 알고리즘 문제에 대해 처음부터 어렵게만 접근했는데 오늘은 쉽게 생각한대로 쉽게 풀 수 있었다. 그러나 쉽게 푼 나머지 다른 팀원들의 코드를 보고 내 코드가 조금 성의가 없다고 느껴졌다. 조금만 더 신경을 써야겠다.

내일은 휴일이라 수업이 없지만 팀에서 깃블로그 작업을 숙제로 받았다. 잘 할 수 있을지 모르지만 하는데 까진 해보자.

profile
반갑습니다람지

0개의 댓글