본문 바로가기

분류 전체보기131

Spring Boot / 트랜잭션 롤백하기 // 둘중에 하나라도 실패하면 rollback 하기 @Transactional(rollbackFor = Exception.class) public void updateAndDelete(Post post) { try { mRepo.update(post); mRepo.delete(post.getId()); System.out.println("DB 정상"); } catch (Exception e) { System.out.println("DB 오류"); throw new RuntimeException(e); } } 2020. 8. 3.
Spring / Security란? 스프링 시큐리티란? 스프링 시큐리티는 인증, 인가, 일반적인 공격에 대한 보호를 제공하는 프레임워크이다. 시큐리티는 인증과 인가를 분리하여 아키텍쳐가 설계되어 있는데, 해당 포스트에서는 아키텍쳐와 인증 프로세스 그리고 인증 프로세스에서 사용되는 주요 컴포넌트에 대해 살펴보겠다. 인증 인증이란 컴퓨터 시스템 사용자의 신원(주소, 신분 등)같은 주장을 증명하는 행위이다. 사람 또는 사물의 신원을 나타내는 행위와 대조적으로 인증은 그 신원을 검증하는 프로세스이다. 즉, 인증이란 사용자 이름, 사용자 아이디, 사용자 패스워드 등과 같은 자격을 증명하는 것을 검사하여 신분을 검증하는 것이다. 그렇다면 어떻게 스프링에서 시큐리티가 동작하는지 다음과 같은 시나리오와 함께 살펴보자. -시나리오- 사용자 이름과 암호를 .. 2020. 8. 2.
Spring Legacy / JDBC 연결 테스트하기 프로젝트에 있어서 단위테스트는 항상 중요하다. 이번 포스트에서는 JDBC를 셋팅하고 연결이 가능한지 확인해보는 테스트를 진행한다. 코드 예시는 다음과 같다. package org.zerock.persistence; import static org.junit.Assert.fail; import java.sql.Connection; import java.sql.DriverManager; import org.junit.Test; import lombok.extern.log4j.Log4j; @Log4j public class JDBCTests { static { try { Class.forName("oracle.jdbc.driver.OracleDriver"); } catch (Exception e) { e.pr.. 2020. 7. 30.
Spring Legacy / 단위 테스트하는 방법 개발자들은 프로젝트에서 수많은 테스트를 거쳐 서비스를 릴리즈하게된다. 그만큼 테스트는 프로젝트 진행에 있어서 중요한 요소이며, 이러한 테스트를 수행하는 방법을 알아야 질 높은 프로젝트를 완성할 수 있다. 그럼 테스트 코드는 어떻게 짜여질까? 아래 예제를 통해 살펴보자. 다음 코드는 'src/test/java' 폴더에 작성된 단위 테스트 목적의 자바파일이다. 보통 테스트 자바파일은 'src/test/java' 디렉토리에 셋팅되며 아래와 같은 코드구성으로 테스트가 이루어진다. package org.zerock.sample; import static org.junit.Assert.assertNotNull; import org.junit.Test; import org.junit.runner.RunWith; im.. 2020. 7. 29.
Android / Retrofit2 사용하기 https://codinginflow.com/tutorials/android/retrofit/part-1-simple-get-request Part 1 - Simple GET Request - Coding in Flow In this video series we will learn how to use Retrofit, which is a type-safe HTTP client for Android and Java. Retrofit allows easy communication with a web service by abstracting the HTTP API into a Java interface. In part 1 we will set up Retrofit in a n codinginflow.com h.. 2020. 7. 29.
MySQL / 테이블 값 깨지는 문제 해결방법 필자는 MySQL이 오라클에 인수되기 전의 최신버전인 5.7과 인수되고 나서의 8버전을 모두 사용해 보았으며 인수되기전 5.7버전에서 한글이 깨지고 8버전에서는 한글이 정상적으로 보여지는 이슈를 접했다. 그러면 5.7버전에서 어떻게하면 한글이 깨지는 현상을 해결할 수 있을까? MySQL5.7이하의 버전을 사용하다보면 다음과 같이 한글이 깨지는 현상을 보게된다. 지금부터 해결방법을 살펴보자. 1. 우선 'my.ini' 파일을 찾아서 관리자권한으로 연다. 2. 파일을 관리자 권한으로 열었다면 아래와 같이 코드를 작성해준다. 3. 한글설정이 되었는지 확인하기 위해 스키마에 아래 쿼리를 작성 show variables like 'c%'; 4. 위와 같이 쿼리를 작성하고 실행해보면 다음과 같은 화면이 출력되며, .. 2020. 7. 28.
Spring Legacy / DI설계 방법 글을 읽기에 앞서 DI의 개념이 아직 잘 잡히지 않았다면 아래 링크 참조. https://swdevelopment.tistory.com/272 Spring / IoC와 DI *loC란? IoC는 Inversion of Control의 약자로 프레임워크의 핵심 요소이며 스프링에도 예외없이 존재하는 개념이다. IoC는 해석하면 제어의 역전 또는 제어의 반전이며 이것은 메소드나 객체의 호출작�� swdevelopment.tistory.com !이 글은 Lombok과 spring-test 라이브러리를 활용하여 DI를 테스트한다. DI를 하기전 먼저해야할 것이있다. 바로 DI 설정이다. 스프링은 클래스에서 객체를 생성하고 객체들의 의존성에 대한 처리 작업까지 내부에서 모든 것이 처리된다. 스프링에서 관리되는 객체.. 2020. 7. 24.
Spring Legacy / 자바파일로 스프링 관련 설정하기 STS툴에서 레거시 프로젝트의 경우 XML기반으로 스프링관련 설정을 하도록 구성되어있으며, 스프링 3버전 이후부터는 XML뿐만이 아닌 자바클래스 파일을 이용하는 스프링 설정을 지원한다. 자바로 스프링 설정을한다라.. 어떻게 할 수 있을까. 지금부터 알아보자. 자바로 스프링을 설정하는 과정은 크게 다음과 같다. web.xml 파일 삭제 및 스프링 관련 파일 삭제 pom.xml 수정 및 스프링 버전 변경 Java 설정 관련 패키지 생성 1. 자바로 설정하기 위해 우선 기본적으로 레거시 프로젝트가 가지고 있는 설정관련 XML파일을 삭제 삭제해야할 XML파일은 web.xml, servlet-context.xml, root-context.xml 이다. servlet-context.xml과 root-context... 2020. 7. 23.
Android / 간단한 계산기 앱 만들기 간단한 계산기 앱을 만들어보자. 이번 포스팅 또한 심심풀이로 업로드한것이니 가볍게 보시길 바랍니다. -계산기 앱 예제- -코드- 필자는 eval()함수를 활용하여 문자열을 숫자로 파싱해서 계산기를 만들었다. 안드로이드는 eval()메서드를 지원하지않으므로 다음과 같이 gradle에 라이브러리를 추가하였다. implementation 'io.apisense:rhino-android:1.1.1' activity_main.xml MainActivity.java package com.example.test; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android... 2020. 7. 22.
Android / 버튼 클릭시 숫자가 증감하는 로직 버튼 클릭시 숫자가 증감하는 간단한 로직을 구현해보자. 심심풀이로 올리는 포스팅이니 가볍게 보시길 바란다. -예제- -코드- activity_main.xml MainActivity.java package com.example.test; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.ProgressBar; import android.widget.TextView; public class MainActivity extends AppCompat.. 2020. 7. 22.
Android/ ProgressBar ProgressBar란? ProgressBar는 작업의 진행 정도를 표시하거나 작업이 진행 중임을 사용자에게 알려주는 수단 중 하나다. 또한, 어떤 일의 진행 상태를 중간 중간 보여줄 수 있는 가장 좋은 방법 중 하나이다. ProgressBar는 대표적으로 두 가지 형태가 존재한다. 속성 설명 막대모양 작업의 진행 정도를 알려주는 막대모양으로 표시한다. 원 모양 작업이 진행 중임을 알려준다. 원 모양으로 된 ProgressBar가 반복적으로 표시된다. XML 레이아웃에 ProgressBar를 추가할 때는 태그가 사용되며, ProgressBar가 갖는 값의 최대 범위는 max속성으로 설정하고 현재 값은 progree속성으로 설정한다. 예를 들자면, 값의 최대 범위가 100이고 max값을 100으로 설정했을.. 2020. 7. 22.
Android/ AppCompat위젯으로 버튼 생성하고 클릭 이벤트 주기 AppCompat 위젯을 사용하여 버튼을 생성하고 클릭시 색상이 바뀌는 이벤트를 어떻게 주는지 아래 예제를 통해 살펴보자. -AppCompatButton 사용 예제- -코드- activity_main.xml white_rounded_button.xml 2020. 7. 22.
Android / ScrollView ScrollView는 인스타그램이나 페이스북과 같은 SNS앱에서 많이 접할 수 있다. 예제를 통해 ScrollView를 사용해보자. 예제는 다음과 같다. activity_main.xml layout_content.xml ScrollView는 include를 활용해 뷰를 구성하고 ScrollView 사용시 주의할 점은 ScrollView는 내부에 레이아웃을 하나밖에 두지못한다는 것이다. 그러니 뎁스 또한 당연 허용되지 않는다. 2020. 7. 21.
Android / 액션바 삭제하기 안드로이드 개발을 위와 같은 에뮬레이터로 할 때 액션바를 직접 커스터마이징하고자 하면 액션바를 없애야한다. 어떻게하면 액션바를 없앨 수 있을까? 방법은 간단하다. 기존의 'DarkActionBar'를 'NoActionBar'로 바꿔주면 해결! -결과- 2020. 7. 21.
Android / 원형 이미지 구현하기 인스타그램 애플리케이션의 헤더부분을 보면 아래와 같이 스토리 부분의 이미지가 원형으로 표시된다. 방법은 아래와 같다. -원형 이미지 예제- 1. 원형 이미지는 라이브러리가 존재하므로 그래들에 라이브러리 코드 추가하고 sync now 클릭 implementation 'de.hdodenhof:circleimageview:3.1.0' 2. 소스코드 작성 및 'de.hdodenhof.circleimageview.CircleImageView' 요소로 이미지 구현하면 끝 activity_main.xml layout_profile.xml 2020. 7. 21.
MySQL / Object 개념 정리 stricky.tistory.com/m/315 Mysql objects 개념 정리 for 개발자 Mysql objects 개념 정리 for 개발자 여러분들이 쓰는 Mysql 내에는 어떤 objects들이 있고, 각 object가 Mysql이라는 DBMS내에서 어떤 역할을 하는지 잘 알고 계십니까? 그동안 DB쪽에서 업무를 하면서 수없이 stricky.tistory.com 2020. 7. 20.
Spring Boot / @ResponseBody와 @RequestBody 오늘 포스팅 내용은 @ResponseBody와 @RequestBody 2가지를 다룬다. 이 두가지 어노테이션은 어떠한 상황에 사용될까? 지금부터 알아보자. 1. @ResponseBody 클라이언트와 서버간의 통신에 있어서 주고받는 것은 크게 2가지가 있다. 바로 파일과 데이터이다. 서버가 클라이언트에게 파일을 리턴해줄 때는 @Controller 어노테이션을 사용하고, 데이터를 리턴해줄 때는 @RestController어노테이션을 사용한다. 그런데 만약 @Controller가 작성된 자바파일에서 데이터를 클라이언트에게 리턴해주고 싶을 땐 어떻게 해야할까? 이때 지금 다루는 @ResponseBody 어노테이션을 사용한다. @ResponseBody는 간단히 말해 @Controller 어노테이션이 달린 자바파일.. 2020. 7. 16.
Spring Boot / @ComponentScan과 @Controller, @Service, @Repository, @Configuration, @Component 이번 포스팅에서는 @ComponentScan 어노테이션과 이 어노테이션이 읽어내는 어노테이션에 대해 살펴보자. @ComponentScan @ComponentScan 어노테이션은 프로젝트 생성 시 프로젝트명과 함께 뒤에 Application.java가 붙어 생성되는 파일에 작성되어있는 @SpringBootApplication 어노테이션에 내장되어 있는 어노테이션이다. @ComponentScan 어노테이션의 주 기능은 첫째, 스캔 위치를 설정하고 둘째, 필터를 통해 특정 어노테이션의 스캔여부를 설정한다. 이 어노테이션은 기본적으로 프로젝트 생성 시 만든 메인패키지의 이하 모든 패키지의 어노테이션들을 전부 스캔한다. 스캔하는 대상 어노테이션은 다음과 같다. @Controller @Service @Reposit.. 2020. 7. 16.
Spring Boot / pom.xml 스프링부트 프로젝트를 생성하면 각각 맡은 역할이 있는 디렉토리 및 파일들이 구성된다. 이번 포스팅에서는 그 중 라이브러리의 다운 및 삭제를 주로 담당하는 pom.xml에 대하여 살펴보자. pom.xml? pom.xml은 방금 언급하였듯이 라이브러리의 다운로드 및 삭제를 담당하는 파일이다. pom.xml의 예시는 아래와 같다. 위 이미지를 보면 여러 태그들이 존재하는데 필자도 모든 태그들에 대해 이해하고 있지 못하고 있으므로 자바버전과 라이브러리에 관련된 태그만 짚어보겠다. 우선 태그 내에 존재하는 태그는 누구나 알 수 있듯이 자바버전을 설정하는 태그이다. 또한 태그 내에 여러 태그들이 존재하는데 이것은 라이브러를 사용할때 사용하는 태그이며 MAVEN을 이용시에 사용하는 태그이다. 프로젝트 생성 직후 po.. 2020. 7. 15.
Android / AndroidX gradle 모음 1. 구글 Material https://github.com/material-components/material-components-android/blob/master/docs/getting-started.md material-components/material-components-android Modular and customizable Material Design UI components for Android - material-components/material-components-android github.com implementation 'com.google.android.material:material:1.2.0-alpha02' 2. lombok https://projectlombok.org/.. 2020. 7. 15.
Android / 레이아웃의 종류 레이아웃을 살펴보기 전에 뷰와 뷰그룹의 개념이 잡히지않았다면 아래링크 참조 https://swdevelopment.tistory.com/283 Android / 뷰(View) *뷰(View) 뷰는 일반적으로 컨트롤이나 위젯으로 불리는 UI구성 요소이다. 즉, 사용자의 눈에 보이는 화면의 구성 요소들이 뷰라고 할 수 있다. 또한 이러한 뷰를 여러 개 포함하고 있는 것을 뷰그� swdevelopment.tistory.com *대표적인 레이아웃 다음은 안드로이드에서 제공하는 대표적인 레이아웃 5가지이다. 레이아웃명 내용 ConstraintLayout(제약 레이아웃) - 제약조건 기반모델 - 제약조건을 사용하여 화면을 구성하는 방법 - 안드로이드 스튜디오에서 자동으로 설정하는 디폴트 레이아웃 LinearLayo.. 2020. 7. 14.
Android / 뷰(View) *뷰(View) 뷰는 일반적으로 컨트롤이나 위젯으로 불리는 UI구성 요소이다. 즉, 사용자의 눈에 보이는 화면의 구성 요소들이 뷰라고 할 수 있다. 또한 이러한 뷰를 여러 개 포함하고 있는 것을 뷰그룹이라고하는데, 이 뷰그룹은 뷰그룹 안에서 뷰의 위치를 지정할 수 있다. 뷰그룹은 여러 개의 뷰를 담고 있는 그릇과 같아서 뷰와는 다른 것이라고 할 수 있으며, 또 다른 뷰그룹을 뷰그룹 안에 넣고 다른 뷰ㅜ와 동일하게 다루도록 만들 수도 있다. 뷰그룹 안에 또다른 뷰그룹을 넣으면 여러가지 장점이 있으며, 이 때문에 뷰그룹은 뷰를 상속하여 뷰그룹을 뷰처럼 다룰 수 있다. 뷰그룹과 뷰의 관계는 디자인 패턴중 컴포지트 패턴을 사용하여 만들어졌으며, 컴포지트 패턴으로 만들어진 뷰그룹은 뛰어난 확장성을 가진다. 때문에.. 2020. 7. 14.
Spring Boot / 프로젝트 생성하기 스프링부트가 무엇인지 간략히 알아보았으니 이제 스프링부트 프로젝트를 생성해보자 툴은 STS를 사용하였다. 1. STS툴을 켜고 'Spring Starter Project' 클릭 2. 빨간 박스에 해당하는 부분들을 사용자 의도에 따라 설정하고 'Next' 잠깐! gradle, maven, yarn, npm, pip등은 라이브러리 관리도구 또는 버전관리 도구 또는 의존성 관리도구라고하며 자바코드 + 라이브러리를 관리하며 패킹을 할수 있다. 3. 빨간 박스는 프로젝트 생성과 동시에 설치하고자하는 라이브러리들을 선택할 수 있는 공간으로, 내가 필요로하는 라이브러리를 채택하고 'Next' 여기서 핵심이 되는 라이브러리는 많지만 그중에서도 2가지를 꼽자면 'Spring Boot DevTools'와 'Spring W.. 2020. 7. 13.
Spring / Filter와 Interceptor Filter -Abstract- Filter : 요청과 응답을 걸러 정제하는 역할을 한다. Filter 개념 Filter는 J2EE의 표준이며 Servlet2.3부터 지원되는 기능이다. Filter는 Servlet Container에 의해 동작이 제어되는 Java Class로 HTTP Request가 Service에 도착하기전, HTTP Response가 Client에 도착하기 전에 제어하는 역할을 한다. Request를 처리할 때에 Dispatcher Servlet이 작업을 처리하기 전에 동작하고 Response를 처리할 때엔 Dispatcher Servlet에 의해 작업이 끝난 이후 동작한다. 또한 자원의 처리가 끝난 후 응답내용에 대해서도 변경하는 처리를 할 수 있다. 보통 web.xml에 등록하고.. 2020. 7. 10.
Spring / AOP란? AOP -Abstract- AOP는 애플리케이션 전체에 걸쳐 사용되는 기능을 재사용하도록 지원하는 것이다. AOP 개념 객체지향의 기본원칙을 적용하여도 핵심기능에서 부가기능을 분리하여 모듈화하는 것은 어려운일이다. 이러한 고충을 덜고자 탄생한 개념이 AOP이며 이러한 AOP는 애플리케이션에서의 기능분리와 핵심기능에서 부가기능을 분리하여 모듈화를 돕는다. 이렇게 분리한 부가기능을 Aspect라는 독특한 모듈형태로 만들어 설계하고 개발하는 방법을 AOP라고 하는 것이다. AOP는 OOP가 가지는 문제점을 보완하기위해 나온 개념이라고 보면된다. AOP는 부가기능을 Aspect로 정의하며, 핵심기능에서 부가기능을 분리함으로써 핵심기능을 설계하고 구현할 때 객체지향적인 가치를 지킬 수 있도록 도와준다. AOP 예.. 2020. 7. 10.
Spring / IoC와 DI *loC란? IoC는 Inversion of Control의 약자로 프레임워크의 핵심 요소이며 스프링에도 예외없이 존재하는 개념이다. IoC는 해석하면 제어의 역전 또는 제어의 반전이며 이것은 메소드나 객체의 호출작업이 개발자에 의해 결정되는 것이 아닌 외부(스프링)에서 결정되는 것을 의미한다. 제어의 반전 개념은 이미 폭넓게 적용되고 있다. 일반적으로 자바 프로그램은 main()메서드로부터 시작하여 개발자가 미리 정한 로직흐름을 따라 객체가 생성되고 실행된다. 하지만 서블릿은 다르다. 서블릿은 개발해서 서버에 배포할 수는 있지만, 배포하고 난 후에는 개발자가 직접 제어할 수 있는 방법이 없다. 대신 서블릿에 대한 제어 권한을 가진 컨테이너가 적절한 시점에 서블릿 클래스이 객체를 만들고 그안의 메서드를 .. 2020. 7. 10.
Spring / Spring이란? *Spring의 개념 스프링이란 자바 플랫폼을 위한 오픈 소스 애플리케이션 프레임워크이며 스프링 프레임워크를 말한다. 스프링은 동적인 웹 사이트를 개발하기 위한 여러 가지 서비스를 제공하며, 대한민국 공공기관의 웹 서비스 개발 시 사용을 권장하고 있는 전자정부 표준프레임워크의 기반 기술로서 사용되고 있다. *Spring의 특징 오픈소스이다. loC 컨테이너를 가진다. DI를 지원한다. 엄청나게 많은 필터를 가지고 있다. 엄청나게 많은 어노테이션을 가지고 있다. MessageConverter를 가지고 있다. (기본값은 현재 JSON이다.) BufferedReader와 BufferedWriter를 쉽게 사용할 수 있다. 꾸준히 발전하고 있다. *Spring의 주요 모듈 스프링에서 사용되는 주요 모듈은 다음과.. 2020. 7. 10.
Spring Boot / 스프링부트란? Spring Boot란 -Abstract- 스프링부트는 Java로 어플리케이션을 쉽고, 빠르고, 간편하게 개발할 수 있도록 각종 라이브러리들을 모아놓은 도구이다. Spring Boot 개념 스프링 부트는 실행만 하면 스프링 기반의 상용화가 가능한 애플리케이션을 쉽게 만들기 위해 단독 실행을 가능케해주는 스프링 프로젝트이다. 즉, 스프링을 쉽게 사용할 수 있도록 필요한 설정을 대부분 미리 셋팅해 놓은 도구라고 할 수 있다. Spring Boot 특징 단독으로 실행이 가능한 스프링 애플리케이션을 생성한다. Tomcat, Jetty, Undertow를 내장하고 있다. 기본설정이 되어있는 starter컴포넌트를 제공한다. 상용화에 필요한 통계, 상태 체크, 외부 설정 등을 제공한다. 설정을 위한 XML코드를 생.. 2020. 7. 10.
Android / 안드로이드 스튜디오 개발환경셋팅 이글은 주관성이 매우 강하며 필요없는 요소들은 넘기시면되고 추가적으로 필요하신부분들은 따로 찾으셔야합니다. 또한 단위별로 설정후 'apply' 해주셔야합니다 잊지마세요. 이 글의 목차 자동 Import 설정하기 폰트 및 dev Theme 설정 라이브러리 셋팅 1. 자동 Import 설정하기 1) 'File' -> 'Settings' 클릭 2) 'import'를 검색 후 'Auto Import' 클릭하고 아래와 같이 진행 후 'Apply' 클릭하면 끝 2. 폰트 및 Theme 설정하기 1) 'font' 검색 후 'Font' 클릭하고 독자가 원하는 폰트와 사이즈, 라인간격등을 설정후 'Apply' 2) 'Appearance' 클릭하고 자신이 원하는 Theme 및 옵션들을 설정 하고 'Apply' 하면 끝 3.. 2020. 7. 8.
MySQL / MySQL 다운로드방법 !이글은 Windows OS 기준이다. 오라클사의 MySQL을 다운로드 받아보자. 1. 우선 MySQL Community용을 다운받기 위해 아래 링크로 이동. https://dev.mysql.com/downloads/ MySQL :: MySQL Community Downloads The world's most popular open source database dev.mysql.com 2. 'MySQL Installer for Windows'클릭 3. 필자는 오라클사가 인수하기 전의 가장 최신 버전인 MySQL을 다운로드 받기위해 아래 처럼 진행하였다. 4. 아래 링크를 누르면 인스톨러 다운로드가 진행된다. 5. 기본값 디벨로퍼 선택후 Next 6. 'Excute' 클릭 7. 위 과정 진행중 다음과 같은.. 2020. 7. 7.