본문 바로가기

Java

(41)
[SpringBoot] OAuth2.0으로 소셜로그인 기능 구현하기(1) - 서비스 등록하기 1) Google Google Cloud Platform에서 서비스 등록하기 Google Cloud Platform 하나의 계정으로 모든 Google 서비스를 Google Cloud Platform을 사용하려면 로그인하세요. accounts.google.com Google 로그인 연동하기 - scope의 기본값은 openid, profile, email이다. profile과 email만 등록한 이유는 openid라는 scope가 존재하면 Open ID Provider로 인식하기 때문이다. 이렇게 되면 OpenID Provider인 서비스(google)와 그렇지 않은 서비스(네이버/카카오 등)로 나눠서 각각 OAuth2Service를 만들어야 하므로 하나의 OAuth2Service로 사용하기 위해 open..
[SpringBoot] 그레이들 프로젝트를 스프링부트 프로젝트로 변경하기 인텔리제이에서 Gradle Project를 생성하면 build.gradle에는 자바 개발에 가장 기초적인 코드만 있다. 스프링부 부트 프로젝트에 필요한 설정들을 추가해주자! - 위 코드는 프로젝트의 플러그인 의존성 관리를 위한 설정이다. - ext라는 키워드는 build.gradle에서 사용하는 지역변수를 설정하겠다는 의미이다. springBootVerstion 전역변수를 생성하고 그 값을 초기화하였다. - 'spring-boot-gradle-plugin'라는 스프링 부트 그레이들 플러그인의 2.1.9 RELEASE를 의존성으로 받겠다는 의미이다. - 위 코드는 앞서 선언한 플러그인의 의존성들을 적용할 것인지를 결정하는 코드이다. - io.spring.dependency-management 플러그인은 스..
[Java] 다형성(polymorphism) 다형성이란? - 객체지향개념에서 다형성이란 '여러 가지 형태를 가질 수 있는 능력'을 의미하며, Java에서는 한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있도록 함으로써 다형성을 프로그램적으로 구현하였다. - 조상 클래스의 타입의 참조변수로 자손 클래스의 인스턴스를 참조할 수 있도록 하였다는 것이다. 클래스 Tv와 클래스 CaptionTv는 서로 상속관계에 있으며, 이 두 클래스의 인스턴스를 생성하고 사용하기 위해서는 다음과 같이 할 수 있다. - 생성된 인스턴스를 다루기 위해서, 인스턴스의 타입과 일치하는 타입의 참조변수만을 사용했다. Tv인스턴스를 다루기 위해서는 Tv의 타입의 참조변술르 사용하고, CaptionTv 인스턴스를 다루기 위해서는 CaptionTv타입의 참조변수를 사용했다. - ..
[Java] 오버라이딩(overriding) - 'override'의 사전적 의미는 '~위에 덮어쓰다(overwrite)'이다. - 조상 클래스로부터 상속받은 메서드의 내용을 변경하는 것을 오버라이딩이라고 한다. - 상속받은 메서드를 그대로 사용하기도 하지만, 자손 클래스 자신에 맞게 변경해야하는 경우가 많다. 이럴 때 조상의 메서드를 오버라이딩한다. 오버라이딩의 조건 - 오버라이딩은 메서드의 내용만을 새로 작성하는 것이므로 메서드의 선언부는 조상의 것과 완전히 일치해야 한다. - 선언부가 서로 일치해야 한다. 다만 접근 제어자(access modifier)와 예외(exception)는 제한된 조건 하에서만 다르게 변경할 수 있다. 조상 클래스의 메서드를 자손 클래스에서 오버라이딩 할때 1. 접근 제어자를 조상 클래스의 메서드보다 좁은 범위로 변경..
[Java] 상속(inheritance) 상속의 정의와 장점 - 상속이란, 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것이다. - 상속을 통해서 클래스를 작성하면 보다 적은 양의 코드로 새로운 클래스를 작성할 수 있고 코드를 공통적으로 관리할 수 있기 때문에 코드의 추가 및 변경이 매우 용이하다. - 상속의 특징은 코드의 재사용성을 높이고 코드의 중복을 제거하여 프로그램의 생산성과 유지보수에 크게 기여한다. - 자바에서 상속을 구현하는 방법은 새로 작성하고자 하는 클래스의 이름 뒤에 상속받고자 하는 클래스의 이름을 키워드 'extends'와 함께 써 주기만하면 된다. - Childe 클래스와 Parent 클래스는 서로 상속 관계에 있다고 하며, 상속해주는 클래스를 '조상 클래스'라 하고 상속 받는 클래스를 '자손 클래스'라 한다. - ..
[IntelliJ] Gradle Wrapper 정리 + Gradle 멀티 프로젝트 구성하기 Gradle wrapper - Gradle wrapper는 Gradle 빌드를 시작하는데 가장 선호되는 방법이다. - Gradle wrapper는 윈도우의 배치 스크립트이고, 다른 운영체제의 쉘 스크립트이다. - Gradle wrapper를 통해서 Gradle 빌드를 시작할 때, Gradle이 자동으로 다운로드되고 빌드를 동작하는데 사용된다. - Gradle Wrapper는 반드시 버전 관리 시스템에서 사용해야 하는 것이다. - 프로젝트에 wrapper를 함께 배포함으로써, 누구든지 Gradle을 설치할 필요없이 프로젝트를 이용할 수 있다. - 빌드를 하는 유저들은 빌드가 이루어진 동일한 버전의 Gradle의 사용을 보장받는다. - 서버에 아무 설정도 필요하지 않기 때문에 지속적인 통합(continuou..
[IntelliJ] Spring Initializr로 Gradle프로젝트 생성하기 Pivotal에서 제공하는 스프링 이니셜라이저(Spring Initializr)는 원하는 언어, 빌드 도구, 스프링 버전, 의존성을 체크하여 빠르게 스프링 부트 프로젝트를 생성해준다. https://start.spring.io/
[Java] 오버로딩(overloading) 오버로딩이란? - 오버로딩(overloading)의 사전적 의미는 '과적하다'. 즉, 많이 싣는 것을 뜻한다. - 메서드도 변수와 마찬가지로 같은 클래스 내에서 서로 구별될 수 있어야 하기 때문에 각기 다른 이름을 가져아 한다. - 자바에서는 한 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메서드가 있더라도 매개변수의 개수 또는 타입이 다르면, 같은 이름을 사용해서 메서드를 정의할 수 있다. - 한 클래스 내에 같은 이름의 메서드를 여러 개 정의하는 것을 '메서드 오버로딩(method overloading)' 또는 간단히 '오버로딩(overloading)'이라고 한다. - 보통 하나의 메서드 이름에 하나의 기능만을 구현해야하는데, 하나의 메서드 이름으로 여러 기능을 구현하기 때문에 붙여진 이름이..
[SpringBoot] Test(2) MockMvc를 이용해서 테스트하기(@WebMvcTest, @AutoConfigureMockMvc) Mock - Mock이라는 단어를 사전에서 찾아보면 '테스트를 위해 만든 모형'을 의미한다. - 테스트를 위해 실제 객체와 비슷한 모의 객체를 만드는 것을 모킹(Mocking)이라고 하며, 모킹한 객체를 메모리에서 얻어내는 과정을 목업(Mock-up)이라고 한다. - 객체를 테스트하기 위해서는 당연히 테스트 대상 객체가 메모리에 있어야 한다.하지만 생성하는 데 복잡한 절차가 필요하거나 많은 시간이 소요되는 객체는 자주 테스트하기 어렵다. 또는 웹 애플리케이션의 컨트롤러처럼 WAS나 다른 소프트웨어의 도움이 반드시 필요한 객체도 있을 수 있다. 이런 복잡한 객체는 당연히 테스트 과정도 복잡하고 어려울 수 밖에 없다. - 따라서 테스트 하려는 실제 객체와 비슷한 가짜 객체를 만들어서 테스트에 필요한 기능만 ..
[SpringBoot] Test(1) 스프링 부트에서 테스트하기(@SpringBootTest) - 개발자들은 누구나 자신이 작성한 코드에 문제가 없음을 검증하기 위해 어떤 방법으로든 테스트 코드를 작성한다. - 작성된 테스트 코드는 유지보수 과정에서 재사용되어 시스템의 안정성을 보장하는 중요한 장치가 된다. - 대부분의 프로젝트에서는 JUnit을 기반으로 일관성 있는 단위 테스트를 진행하는데, 단위 테스트란 자신이 작성한 클래스에 대한 테스트로써 테스트 단계 중에서 가장 기본이라 할 수 있다. - 단위 테스트가 효율적으로 이루어지기 위해서는 테스트할 객체가 최대한 단순해야 하지만 웹 애플리케이션은 테스트 대상 객체가 특정 서버와 관련되어 있거나 다른 객체들과 연관되어 관계가 복잡한 경우가 일반적이다. - 예로 웹 애플리케이션에서 개발자가 만든 컨트롤러가 정상적으로 동작하는지 확인하기 위해서는 서블..