Back-end/Java&Spring (10) 썸네일형 리스트형 ProcessBuilder, AWS S3를 통해 Web IDE 개발하기 구름톤 딥다이브 풀스택 과정을 진행하면서 코딩 과외용 Web IDE 플랫폼 개발 프로젝트를 진행하였다. 나는 해당 프로젝트에서 IDE 환경 구축 부분을 담당했는데, 프로젝트를 진행하면서 고민한 점을 공유하기 위해 글을 작성하게 되었다. 구현해야 할 기능은 크게 1. 코드 실행2. 코드 저장3. 코드 실시간 공유 이렇게 세가지가 있었다. 해당 게시글에서는 코드 실행/저장에 관한 내용만 다루고 코드 실시간 공유는 다음 게시물에서 다뤄보도록 하겠다. 코드 실행 코드를 실행하는 기능은 JAVA에서 외부 프로세스를 만들 수 있는 java.lang 패키지의 ProcessBuilder 클래스를 사용하였다. private String runPython(String localFilePath, String input) .. Spring Boot - 외부 설정 파일과 프로필 관리 스프링 외부 설정 파일과 프로필 관리에 대해 자세히 알아보자 설정 파일 OS 환경 변수, 자바 시스템 속성, 커맨드 라인 옵션 인수는 사용해야 하는 값이 늘어날수록 사용하기가 불편해진다. 실무에서는 수십개의 설정값을 사용하기도 하므로 이런 값들을 프로그램을 실행할 때 마다 입력하게 되면 번거롭고, 관리도 어렵다. 그래서 나온 대안이 설정값을 파일에 넣어서 관리하는 방법이다. 그리고 애플리케이션 로딩 시점에 해당 파일을 읽어들이면 된다. application.properties 또는 application.yml 라는 이름의 파일을 자바를 실행하는 위치에 만들어 두기만 하면 스프링이 해당 파일을 읽어서 사용할 수 있는 PropertySource 의 구현체를 제공한다. 하지만 각각의 서버에 각각 다른 설.. Spring Boot - 핵심 기능 스프링 부트의 핵심 기능을 설명하기 전에 간단하게 왜 Spring Boot가 등장했는지부터 알아보자! Spring Boot 등장 배경스프링의 생태계가 점점 커지면서 다양한 오픈 소스의 등장으로 수 많은 라이브러리를 함께 사용해야 하게 되었다.라이브러리를 사용할 때 필요한 설정이 점점 늘어나고 수많은 스프링 빈 등록을 해야했고 심지어 스프링 프로젝트를 시작하는 것 조차 설정이 너무 복잡해 최소한의 인간 개입으로 시작을 위한 설정 과정을 대신 해주는 Spring Boot가 등장하게 되었다. Spring Boot 핵심 기능 스프링 부트 핵심 기능은 크게 다섯 가지가 있다. 1. WAS (Web Application Server) 과거에 자바로 웹 애플리케이션을 개발할 때는 먼저 서버에 톰캣 같은 WAS(웹 .. Spring JPA (3) - 매핑 엔티티 매핑엔티티를 매핑할 때 사용하는 어노테이션들을 살펴보자객체와 테이블 매핑@EntityJPA에게 관리를 맡기기 위해서는 클래스에 @Entity 어노테이션을 붙여줘야한다.주의할 점은 다음과 같다.기본 생성자 필수 (Lombok의 @NoArgsConstructor 를 사용하면 자동으로 기본 생성자를 생성해준다)final 클래스, enum, interface, inner 클래스 사용 X저장할 필드에 final 사용 X@Table엔티티와 매핑할 테이블을 지정해준다.기본값은 엔티티 이름을 사용한다.속성으로는 name, catalog, schema, uniqueConstraints(DDL)이 있다.필드와 컬럼 매핑@Column@Enumerated자바 enum 타입을 매핑할 때 사용한다.@Temporal날짜 타.. Spring JPA (2) - JPA 동작 과정 영속성 컨텍스트 JPA 동작 과정을 이해하려면 영속성 컨텍스트에 대한 이해가 필요하다. 영속성 컨텍스트란 엔티티를 영구 저장하는 환경이라는 뜻이다. 또한 논리적인 개념이며 눈에 보이지 않는다. 우리는 EntityManager를 통해 영속성 컨텍스트에 접근할 수 있다. 엔티티의 생명주기 엔티티의 생명주기는 다음과 같다. 비영속 (new/transient) 영속성 컨텍스트와 전혀 관계가 없는 객체를 새로 생성한 상태 영속 (managed) 영속성 컨텍스트에 관리되는 상태 준영속 (detached) 영속성 컨텍스트에 저장되었다가 분리된 상태 삭제 (removed) 삭제된 상태 영속객체 생성 후 객체를 영속 컨텍스트에 저장한 상태이다. EntityManager em = emf.createEntityManag.. Spring JPA (1) - JPA 이해 JPAJava Persistence API , 자바 진영의 ORM 기술 표준이다. ORMObject-relational mapping(객체 관계 매핑) 그럼 ORM 기술인 JPA를 왜 사용하게 되었는가? JPA의 사용 이유현재 개발자들은 객체 지향 언어로 개발을 하고 객체를 관계형 데이터베이스에 관리를 한다. 하지만, 객체 중심 개발과 SQL 중심 개발은 동시에 이루어지기 쉽지 않다. 여러가지 문제점이 있겠지만 대표적으로1. SQL 코드의 반복 - CRUD를 구현할 때마다 SQL코드를 계속 반복해서 사용해야 한다.2. SQL에 대한 큰 의존성 - Table에 Column 하나를 수정, 추가하게 된다면 수많은 SQL 코드를 바꿔야 한다.3. 패러다임의 불일치 - 객체를 관계형 데이터베이스에 저장하는 과정에.. Spring JDBC (4) - 예외 처리 체크 예외와 언체크 예외Exception 과 그 하위 예외는 모두 컴파일러가 체크하는 체크 예외이다. 단 RuntimeException 은 예외로 한다. Checked 예외 - 컴파일러가 예외를 체크 (잡아서 처리하거나(catch) 던지거나(throws) 둘 중 하나는 무조건 해야함)Unchecked 예외 - 컴파일러가 예외를 체크하지 않음 (예외를 잡아서 처리하지 않아도 throws 생략 가능) 절대 예외를 놓치면 안되는 상황이 아닌 이상 Unchecked 예외로 만들자! (복구 불가와 의존 문제 때문) 그러면 전 게시물에서 우리가 썼던 SQLException과 ConnectException을 Runtime 예외로 바꾸면 서비스 계층이 해당 예외를 무시할 수 있기 때문에 의존 관계를 해결할 수 있을 것.. Spring JDBC (3) - 트랜잭션 트랜잭션데이터베이스 트랜잭션(Database Transaction)은 데이터베이스 관리 시스템 또는 유사한 시스템에서 상호작용의 단위이다. 여기서 유사한 시스템이란 트랜잭션이 성공과 실패가 분명하고 상호 독립적이며, 일관되고 믿을 수 있는 시스템을 의미한다. - 위키백과 트랜잭션이란 하나의 상호작용을 안전하게 처리해주는 것이다. 트랜잭션은 ACID를 보장해야 하는데Atomicity(원자성)Consistency(일관성)Isolation(격리성)Durability(지속성)을 뜻한다. 운영체제의 임계구역과 상호배제를 생각하면 편할 듯 하다! 사용법은 commit/rollback 만 알면 된다.데이터를 변경하고 그 결과를 반영하려면 commit,반영하고 싶지 않으면 rollback을 호출하면 된다. 다른 세션에.. Spring JDBC (2) - 커넥션 풀과 데이터 소스 DB 커넥션 획득 과정 Application Layer ⇄ DB Driver ⇄ DB DB 커넥션의 과정은 다음 그림과 같이 1. 애플리케이션 로직이 DB 드라이버를 통해 커넥션 조회2. 드라이버가 DB와 TCP/IP 커넥션 연결, 부가정보 전달3. DB가 인증 후 세션 생성하고 다시 드라이버에 완료 응답4. 드라이버는 커넥션 객체를 만들어 클라이언트에 반환 이렇게 복잡한 과정을 거친다. 이런 과정은 매번 거친다는건 자원적, 시간적으로 매우 손해이기 때문에 각 DB에 맞는 커넥션을 미리 만들어두고 사용하는 커넥션 풀이라는 방법을 고안하게 되었다. 커넥션 풀 Application Layer ⇩ Connection Pool (여러개의 커넥션이 .. Spring JDBC(1) - JDBC 이해 프로젝트를 진행하면서는 대부분 ORM 기술인 JPA를 사용했고, Spring을 처음 공부할때는 잠깐 JDBC Template을 사용해서 과제를 진행한 적이 있었지만 JDBC API의 제대로 된 동작 과정과 JDBC만을 쓰는 코드는 공부해 본 적은 없는 것 같아 이번 기회에 공부를 해 보기로 했다.JDBC JDBC(Java Database Connectivity)는 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API다. JDBC는 데이터베이스에서 자료를 쿼리하거나 업데이트하는 방법을 제공한다. - 위키백과 위키백과에 나와있는 것 처럼 JDBC는 1. 데이터베이스마다 사용 방법이 모두 다르다는 문제 (데이터베이스를 바꾼다면 개발자가 그 방법들을 새로 학습해야 함)2. 데이터베이스를 바꿀때 마다 프로.. 이전 1 다음