일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Digital Ocean
- express
- Unity IAP
- Camera Zoom
- Camera Movement
- server
- Packet Network
- rpg server
- Unity Editor
- critical rendering path
- spread 연산자
- MySQL
- css framework
- unity
- react
- draganddrop
- springboot
- Google Developer API
- SDK upgrade
- docker
- java
- Spring Boot
- --watch
- nodejs
- linux
- screencapture
- Git
- mongoDB
- OverTheWire
- Google Refund
- Today
- Total
목록springboot (8)
우당탕탕 개발일지

오늘의 목표게스트 가입과 게스트 로그인을 구현한다.게스트 가입/로그인 시 성공한 유저의id, 백업된 데이터(로그인 유저일 경우) , 엑세스토큰을 반환한다. 가장 외부부터 보자. AuthController.js에서는 guest로 가입하는 함수, uid를 이용해 로그인하는 함수 2개를 만들었다. 실제 가입/로그인 로직은 UserService.java에서 이루어지고있다.//AuthController.java @PostMapping("/register/guest") public ResponseEntity registerGuest() { User newGuest = userService.registerGuest(); 유저가입 //가입정보를 바탕으로 로그인 진행 Opti..
메일보내기를 하면서 내 이메일과 앱 비밀번호를 application.properties에 넣어야하는데, application.properties는 깃에 올라가기 때문에 보안상의 이슈가 있다. 그래서 .env파일로 옮기는 방법을 찾아보았다. 루트디렉토리( build.gradle 이 있는 위치)에 .env 파일을 생성하여 다음과같이 원하는 변수를 설정한다.##.envmail.username=myusernamemail.password=mypassword .gitignore 파일에 .env를 추가한다.git에 커밋되지 않도록 도와준다. build.gradle에 dependencies를 추가한다. .env안의 값을 가져올 수 있게 하는 라이브러리이다.implementation 'io.github.cdimasc..
배포하기 위해서는, 로컬환경과 배포환경 시 서로다른 세팅을 적용해야한다. 이를 위해 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 쿼리는..
리팩토링하기이전에 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..