| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
- unity
- Unity Editor
- Digital Ocean
- Camera Movement
- OverTheWire
- rpg server
- linux
- css framework
- Unity IAP
- spread 연산자
- Packet Network
- express
- Spring Boot
- springboot
- docker
- server
- react
- Camera Zoom
- Google Refund
- screencapture
- MySQL
- SDK upgrade
- --watch
- java
- draganddrop
- Git
- mongoDB
- critical rendering path
- Google Developer API
- nodejs
- Today
- Total
목록Server (39)
우당탕탕 개발일지
고객이 문의하기를 남기면 문의하기 내용과 함께 이메일로 전송이 되는 기능을 구현하고 있다. 구글은 많이 복잡하다고 하여, 오늘은 네이버로 구현해본다. 다음에 기회가 되면 구글로도 구현해보자. ( 사실은 구글 구현하다가 계속 인증실패가 떠서 중도포기했다.. 다음번에 꼭 정복해보도록 하자..ㅜㅜㅜ) 네이버 계정에서 SMTP 를 활성화 네이버 메일에 로그인 > 환경설정 > IMAP / SMTP 설정 > 외부메일 프로그램 사용 옵션을 활성화한다.네이버 계정 설정 > 보안설정 > 2단계 인증 > 애플리케이션 비밀번호를 생성한다. 종류는 지메일로 하였다. 비밀번호는 한번 페이지를 벗어나면 다시 보여주지 않으므로 다른곳에 잘 백업해 두도록 하자. SpringBoot 프로젝트에 dependencies 추가build...
배포하기 위해서는, 로컬환경과 배포환경 시 서로다른 세팅을 적용해야한다. 이를 위해 profile 을 사용한다.개발 단계에서는 메모리에 가볍게 저장/휘발되는 H2DB 를 사용한다. 변경사항이 많기 때문에 테이블을 신경쓰지 않고 개발이 가능하다. ddl-auto 옵션을 활성화 하면 테이블이 자동으로 생성된다.릴리즈버전에서는 mysql 버전을 사용하도록 profile을 설정한다. build.gradle에 implements를 추가한다.implementation 'com.h2database:h2' application.yamlspring: config: activate: on-profile: dev datasource: url: "jdbc:h2:mem:library;MODE=MYSQL..
실습 library db에는 user테이블과 book테이블, 그리고 어떤 유저가 어떤 책을 빌렸는지 정보를 저장하는 user_loan_history 테이블이 있다. user_loan_history 테이블은 아래처럼 생겼다.create table user_loan_history( id bigint auto_increment, user_id bigint, book_id bigint, is_return tinyint(1),) SQL대신 ORM을 사용하게 된 이유 중 하나는, DB테이블과 객체의 패러다임이 다르기 떄문이었다. Java는 객체지향형 언어이고, 대규모 웹 어플리케이션을 다룰 때에도 객체지향적인 방법이 어울린다. 현재 코드를 조금 더 객체지향적으로 업그레이드 하는 방법을 알아보자..
트랜잭션Service계층이 해야하는 역할, 트랜잭션이다.연관된 작업은 모두 성공하거나 모두 실패한다. 이 쪼갤 수 없는 작업의 단위를 트랜잭션이라고 한다. start transaction;commit; ## successrollback; ## fail 서비스 메소드가 시작할 때 트랜잭션이 시작된다서비스 메소드 로직이 모두 성공적이면 commit,한개라도 실패하면 rollback되도록 구현해보자.Service 계층의 함수 위에 @Transaction 어노테이션을 이용하여 구현할 수 있다. @Transactional public void saveUser(UserCreateRequest request){ userRepository.save(new User(request.getName(..
지금까지는 아래처럼, 문자열에 SQL 구문을 직접 적었다. 이런 방식은 여러가지 문제가 있다. public boolean isUserNotExist(int uid){ String querySQL = "select * from user where id = ?"; return jdbcTemplate.query(querySQL, (res,rowNum)->0,uid).isEmpty(); } 실수할 가능성이 많고, 실수를 인지하기 힘들다 . 문자열에 오타가 날 경우, 컴파일 시점이 아니라 런타임 시점에 발견되기 때문이다.특정 데이터베이스에 종속되게 된다. 상황에 따라 DB가 변경될 수 있는데, 만약 db가 변경될 경우, 모든 코드를 재작성해야한다.반복작업이 많아진다. CRUD 쿼리는..
윈도우에서 정상적으로 run까지 되는것을 확인하고 mac으로 옮겨왔는데 이런 현상이 발생gradle 버전도 동일하고 jdk-21버전도 분명히 존재한다.검색해보니 extension 중에 java language support 랑 충돌이 나서 그런거라고 한다.java language support를 제거하고 vscode를 재시작하면된다. vscode에서 스프링부트를 개발/실행하기 위한 extensions 목록은 다음과 같다Extension pack for javaSpring boot extension packJava
리팩토링하기이전에 UserController 에서 유저생성, 조회, 수정,삭제 API를 구현하였다. 이것을 리팩토링 해보고, 스프링컨테이너에 대해 알아보자. 컨트롤러에서 하던 작업들은 다음 3개로 분리될것이다.Controller : API의 진입지점으로써 HTTP Body를 객체로 변환한다Service : 현재 유저가 있는지등을 확인하여 예외처리 진행Repository : SQL을 사용해 실제 db와 통신을담당. 총 3개의 역할군으로 나누어서 작업을 하도록한다. 그럼 각 코드를 보도록 하자UserController.java@RestControllerpublic class UserController { private UserService userService; public UserControll..
Database 기본mysql 에 접속한다. 터미널을 열고,mysql -u root -p사용가능한 명령어들을 알아보자.아래 언어들은 DDL (Data Definition Language) 라고한다.create database [name]; ##데이터베이스 생성show databases; ##데이터베이스 목록보기drop database [name]; ##데이터베이스 삭제use [database-name]; ## 데이터베이스 접속## 데이터베이스 안으로 들어왔음.show tables; ##테이블 조회create table [테이블 이름]( [필드이름] [타입] [부가조건], ... primary key ([필드이름]));]drop table [테이블이름]; ##테이블 제거SQL 을 알아보자CRUD (Cre..