[Spring]1주차

💡 학습 내용
1. 웹의 기본 개념
2. 자바(Java) 기본 문법
3. 클래스(Class), 메소드(Method), 멤버(Member)
4. 스프링 작동 방법
5. 컨트롤러(Controller)
6. 그레이들(Gradle)

시작하기 전

웹서비스?

클라이언트와 서버로 구분이 된다. 클라이언트에서 원하는 데이터가 있을 때마다 서버에 요청하고, 응답 데이터를 받아 사용자에게 보여준다.
클라이언트 - 사용자가 보는 화면
서버 - 원하는 데이터가 있는 곳, 원하는 데이터를 요청하면 이에 응답해 주는 곳

Java란?

프로그래밍 언어, Java는 거의 웹개발 서버에만 사용하고 있음.
웹서버에는 압도적으로 많이 쓰고 있음

스프링이란?

자바라는 언어로 서버를 만드는데 필요한 것, 이미 필요한 것들이 만들어져 있고 우리는 필요한 것만 채우는 것!

IntelliJ 란?

  • MS Word 가 문서작업하는데 특화된 메모장인 것처럼, 자바로 코드를 작성하는데 특화된 메모장.
프로젝트 생성하기


스프링 시작 전 항상 다운받고 시작할 것들!

웹의 기본 개념

API

하나의 약속, 정해진 대로 요청을 하면 정해진 결과물을 돌려주는 것
데이터를 요청하고 받아서 보여주는 것!

웹의 동작개념

HTML을 받는 경우

뼈대에 해당하는 것이 HTML
뼈대에 색을 입히는 것 CSS
페이지를 움직이게 만들어 주는 것, 동적으로 만들어 주는 것 JavaScript
=> 클라이언트가 요청을 하면 3가지 모두 받아오는 경우

데이터만 받는 경우

데이터만 받아오는 경우가 더 많다.
JSON 형식으로 데이터를 받아온다.

스프링이 담당하는 부분은?

스프링은 "서버"를 담당한다.
요청에 따라 눈에 보이는 것들 또는 데이터를 제공해줌
스프링은 자바 언어를 바탕으로 만들어짐!

Java 기초 문법

System.out.println

package com.sparta.week01.prac;

public class Prac {

    public static void main(String[] args) {
        System.out.println(); // 'sout' + Enter ot Tab
        System.out.println("hello, sparta!");

    }
}

변수

package com.sparta.week01.prac;

import org.aspectj.weaver.ast.Test;

import java.awt.*;
import java.util.ArrayList;
import java.util.List;

public class Prac {

    public static void main(String[] args) {
        // 1. 화면에 나타내기
        System.out.println(); // 'sout' + Enter ot Tab
        System.out.println("hello, sparta!");

        // 2. 변수
        String myName = ""; // 변수 표기법 CamelCase

        // 숫자
        int a = 7; // 정수
        int b = 3; // 싷수
        System.out.println(a + b);

        float c = 3.7f;
        System.out.println(c);

        int n = 1000000000;
        Long d = 10000000000L;
        System.out.println(d);

        // 문자열
        String name = "김소영"; // 변수 표기법 CamelCase
        String name2 = "김도영";
        System.out.println(name + name2);

        // boolean
        int myAge = 20;
        boolean isAdult = myAge > 20;
        boolean isKid = myAge > 20;
        System.out.println(isAdult);
        System.out.println(isKid);
        System.out.println(myAge == 20); // true
        System.out.println(myAge != 20); // false
        boolean isTest = true;

        // 배열 List
        // 1) 순서가 중요
        // 2) 같은 자료형만 넣을 수 있음
        // 3) 넣을 때는 add, 조회할 때는 get, 제거할 때는 remove 사용
        List<String> myList = new ArrayList<>(); // List 선언
        String course1 = "Spring";
        String course2 = "React";
        myList.add(course1);
        myList.add(course2);
        System.out.println(myList);
        System.out.println(myList.get(1));
        myList.remove(1);
        System.out.println(myList);

        // 3. import
        // List 처럼 미리 작성된 코드를 불러오는 것
        
        // 4. 주석 Ctrl + /

        // 5. 정렬 Ctrl + Alt + L

        // Example
        String co1 = "Web";
        String co2 = "App";
        List<String> coList = new ArrayList<>();
        coList.add(co1);
        coList.add(co2);
        System.out.println(coList);
        
    }
}

메소드

반복적인 행동을 줄여서 어디든 갖다 쓸 수 있는 명령 모음

ackage com.sparta.week01.prac;

public class Prac {

    public static void printInfo() {
        String title = "Hello";
        String name = "Soyeong";
        int weeks = 1;
        float ratings = 5.0f;

        System.out.println("title: " + title);
        System.out.println("name: " + tutor);
        System.out.println("weeks: " + weeks);
        System.out.println("ratings: " + ratings);
    }

    public static void main(String[] args) {
        printInfo();
    }
}

메소드의 구조

public (return type) methodName(parameters) {
	// ...
    return (return value)
}
package com.sparta.week01.prac;

public class Prac {

    // 파라미터 X, 반환값 X
    public static void simplePrint() {
        System.out.println("파라미터도 없고, 반환값도 없어요!");
    }

    // 파라미터 O, 반환값 X
    public static void simpleSum(int num1, int num2) {
        System.out.println("num1 :" + num1 + ", num2: " + num2);
    }

    // 파라미터 X, 반환값 O
    public static int simpleReturn() {
        return 3;
    }

    // 파라미터 O, 반환값 O
    public static int sum(int num1, int num2) {
        return num1 + num2;
    }
    
    public static int sub(int num1, int num2) {
        return num1 - num2;
    }

    public static void main(String[] args) {
        simplePrint();
        simpleSum(2,3);
        System.out.println(simpleReturn());
        System.out.println(sum(2, 3));
        System.out.println(sub(5, 2));
    }
}

메소드명은 변수명과 규칙(영어사용, 소문자시작, 공백없음, 대문자구분)이 같음

반복문, 조건문

반복문
package com.sparta.week01.prac;

import java.util.ArrayList;
import java.util.List;

public class Prac {

    public static void main(String[] args) {
        List<String> fruits = new ArrayList<>();
        fruits.add("감");
        fruits.add("배");
        fruits.add("감");
        fruits.add("딸기");
        fruits.add("수박");
        fruits.add("메론");
        fruits.add("수박");
        fruits.add("딸기");
        fruits.add("메론");
        fruits.add("수박");
        fruits.add("메론");
        fruits.add("수박");
        fruits.add("감");
        System.out.println(fruits);

        for (int i=0; i<fruits.size(); i++) {
            String fruit = fruits.get(i);
            System.out.println(fruit);
        }

    }
}
조건문
package com.sparta.week01.prac;

public class Prac {

    public static void main(String[] args) {
        int age = 20;

        if (age > 19) {
            System.out.println("Adult.");
        } else {
            System.out.println("Nope.");
        }
    }
}

조건문 & 반복문

package com.sparta.week01.prac;

import java.util.ArrayList;
import java.util.List;

public class Prac {

    public static int countFruit(String fruit, List<String> fruits) {
        int count = 0;
        for (int i = 0; i < fruits.size(); i++) {
            if (fruits.get(i).equals(fruit)) {
                count += 1;
            }
        }
        return count;
    }

    public static void main(String[] args) {
        List<String> fruits = new ArrayList<>();

        fruits.add("감");
        fruits.add("배");
        fruits.add("감");
        fruits.add("딸기");
        fruits.add("수박");
        fruits.add("메론");
        fruits.add("수박");
        fruits.add("딸기");
        fruits.add("메론");
        fruits.add("수박");
        fruits.add("메론");
        fruits.add("수박");
        fruits.add("감");

        System.out.println(countFruit("수박", fruits));

    }
}

자바 클래스

클래스란?

정보를 묶는 것!

객체지향 프로그래밍

-코드를 현실과 비슷한 개념으로 나타내기 위해

클래스

Prac.java

package com.sparta.week01.prac;

import java.util.ArrayList;
import java.util.List;

public class Prac {

    public static void main(String[] args) {
        List<String> fruits = new ArrayList<>();

        Course course = new Course();
        course.title = "웹개발의 봄, Spring";
        System.out.println(course.title);
        System.out.println(course.tutor); // null

        Course course2 = new Course("React", "James", 20);
        System.out.println(course2.title);
        System.out.println(course2.tutor);
        System.out.println(course2.days);
    }
}

Course.java

package com.sparta.week01.prac;

public class Course {
    // title, tutor, days 가 Course 라는 맥락 아래에서 의도가 분명히 드러나죠!
    public String title;
    public String tutor;
    public int days;
    
    // 기본생성자 - Java에서 기본적으로 생성해줌. (생성자를 선언 안한 경우)
    public Course() {
        
    }
    
    // 생성자
    public Course(String title, String tutor, int days) {
        this.title = title;
        this.tutor = tutor;
        this.days = days;
    }
}

Getter, Setter

private, public

클래스의 모든 정보를 손쉽게 바꿀 수 있으면 안됨.
public 밖에 드러내도 되는 것들
private 함부로 바꾸면 안되는 것들

package com.sparta.week01.prac;

public class Course {

    private String title;
    private String tutor;
    private int days;

    public Course(String title, String tutor, int days) {
        this.title = title;
        this.tutor = tutor;
        this.days = days;
    }
}

private으로 선언을 하고 정해진 방법으로만 값을 바꿀 수 있도록 하는 것 => setter

Getter / Setter

Course.java

package com.sparta.week01.prac;

public class Course {

    private String title;
    private String tutor;
    private int days;
    
    public Course() {
        
    }

    public Course(String title, String tutor, int days) {
        this.title = title;
        this.tutor = tutor;
        this.days = days;
    }

    // Setter
    public void  setTitle(String title) {
        this.title = title;
    }

    public void setTutor(String tutor) {
        this.tutor = tutor;
    }

    public void setDays(int days) {
        this.days = days;
    }

    // Getter
    public String getTitle() {
        return this.title;
    }

    public String getTutor() {
        return this.tutor;
    }

    public int getDays() {
        return this.days;
    }

}

Prac.java

package com.sparta.week01.prac;

import java.util.ArrayList;
import java.util.List;

public class Prac {

    public static void main(String[] args) {
        List<String> fruits = new ArrayList<>();

        Course course = new Course();
        course.setTitle("Spring");
        course.setTutor("Jane");
        course.setDays(10);
        System.out.println(course.getTitle());
        System.out.println(course.getTutor());
        System.out.println(course.getDays());

        Course course2 = new Course("React", "James", 20);
        System.out.println(course2.getTitle());
        System.out.println(course2.getTutor());
        System.out.println(course2.getDays());
    }
}

Tutor.java

package com.sparta.week01.prac;

public class Tutor {
    private String name;
    private String bio;
	
    // 기본 생성자
    public Tutor() {

    }

	// 생성자
    public Tutor(String name, String bio) {
        this.name = name;
        this.bio = bio;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setBio(String bio) {
        this.bio = bio;
    }

    public String getName() {
        return this.name;
    }

    public String getBio() {
        return this.bio;
    }
}

브라우저에 나타내보기

데이터로 응답하려면, RestController 를 사용해야 한다.

Rest

서버의 응답이 JSON 형식임을 나타냄.
HTML, CSS 등을 주고받을 때는 Rest를 붙이지 않음.

Controller

누군가 말을 걸면 응답하는 것.
클라이언트의 요청(Request)를 전달받는 코드를 Controller 라고 함.
=> JSON만을 돌려주는 것은 RESTController라고 부름.

JSON 형식으로 응답하는 자동 응답기! => REST Controller

Rest Controller 만들기

package com.sparta.week01.controller 위치

package com.sparta.week01.controller;

import com.sparta.week01.prac.Course;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class CourseController {

    @GetMapping("/courses")
    public Course getCourses() {
        Course course = new Course();
        course.setTitle("Spring");
        course.setDays(35);
        course.setTutor("YoungKim");
        return course;
    }
}

브라우저에서 주소를 치는 행위를 GET 방식으로 정보를 요청

Gradle

  • Javascript - NPM
  • Python - pip
  • Java - mavenCentral, jcenter

⇒ 다운로드받고 적용하는 과정을 간편하게 할 수 있음
https://mvnrepository.com/
build.gradle에 작성

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    compileOnly 'org.projectlombok:lombok'
    runtimeOnly 'com.h2database:h2'
    runtimeOnly 'mysql:mysql-connector-java'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    // https://mvnrepository.com/artifact/org.json/json
    implementation group: 'org.json', name: 'json', version: '20160810'
}
  • 라이브러리 가져올 때
  • 배포할 때

좋은 웹페이지 즐겨찾기