Web Programming 18

Node.js로 .env 활용하기

사용하는 이유: 개발서버에서 잘 돌아가던 서버가 라이브 프로덕션 서버에서 안돌아가는 것을 확인하였습니다. 확인해보니, 개발서버에서 Node.js 에서 Python process를 콜하기 위해서 파이썬을 부르는 과정에서 절대경로를 사용해야만 돌아가야 하는 라이브러리가 있었는데, (로깅과 nssm 서비스 관련) 파이썬 절대경로의 위치가 개발서버와 라이브서버가 다르기 때문이었습니다. 물론 이를 해결하는 방법으로는 여러 가지가 있겠지만, 가장 바람직한 방법으로는, .env 파일과 같은 파일을 만들어놓고, 그 파일에서 변수들을 가져오는 방법이 가장 좋은 방법이라고 생각됩니다. .env 파일 같은 경우에는 .gitignore 파일에 적어놓음으로써 업데이트 되지 않도록 합니다. 물론, example.env 같은 파일..

Recoil 에서 다른 페이지에서 Recoil Atom 값을 잘 불러들이지 못하는 경우

갑자기 Recoil 관련 컨텐츠를 올리게 되었네요. Recoil은, 상태 관리 library입니다. React를 사용하는데 있어서, Global State Management tool로 보통 대표적으로 Redux를 많이 씁니다. 하지만 Redux의 단점은, boilerplate 코드가 너무 많다는 점입니다. Reducer, Store, Action 등등, 알아야 하는 코드가 많고, 직관적이지 않다는 단점이 있습니다. 단, 여러 사람들이 같이 작업하는 경우 정형화하기 쉽다는 장점이 있습니다. 하지만 Recoil의 경우에는 간단하게 Atom이라는 단위만 가지고도 충분히 global State를 잘 구현할 수 있습니다. 하지만 Atom을 이용해서 global State를 구현했음에도 다른 페이지로 redire..

Web Programming 2021.12.06

Redux가 필요한 이유

참고 자료 : https://blog.logrocket.com/why-use-redux-reasons-with-clear-examples-d21bffd5835/ - Redux란 무엇일까요? state management tool 입니다. - Redux가 필요한 이유 Redux가 없다면, 모든 state들이 서로 통신하기 위해서는 공통의 부모까지 연결해서 다시 property로 내리는 상황이 반복되어야 할 겁니다. 다음 코드를 보면서 무슨 말인지 알아볼까요? class App extends React.Component { constructor(props) { super(props); // First the Parent creates a state for what will be passed this.stat..

Web Programming 2021.08.20

자바 스프링 게시판 - 게시글 저장하기

Home에서 글쓰는 페이지를 갈 수 있는 버튼을 만든 후, 페이지를 만듭니다. 제목 내용 일단 PostController를 만듭니다. 물론 그 전에 post 모델을 만들어야겠죠. # import 생략 @Entity @Table(name = "post") public class Post { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String userName; private String title; private String content; private int count; public String getTitle() { return title; } public void setTitle(String ti..

Java Spring Security를 이용해서 회원가입 구현하기

저번 포스팅까지 해서 로그인 기능을 구현하는데 성공했습니다. Spring Security와 JPA, H2 Database를 사용해서 로그인 기능을 구현했는데요, 이번 포스팅에서는 회원가입 기능을 구현해 보도록 하겠습니다. 다행인 건, 회원가입 기능은 로그인 기능보다 구현하기 간단하다는 것입니다. 서비스나 DAO, DTO 등도 사용하지 않고 구현을 해보도록 하겠습니다. 일단 register.html 페이지를 만듭니다. 회원 가입 회원 가입하기 비밀번호를 잃어버리셨나요? 이미 가입하셨나요? 로그인하세요 html을 만들 때 주의할 점은, 현재 Thymeleaf를 쓰고 있기 때문에 head 전에 태그를 붙여줘야 된다는 점입니다. 또, name을 camelcase 형태로 model entity에서 지정해준 대로 ..

자바 스프링 부트로 hello world 프린트하기

오늘은 스프링 부트로 hello world 를 print하는 방법을 포스팅 하도록 하겠습니다. 일단 STS(Spring Tool Suite)를 받은 후, 새로운 project를 만듭니다. 이렇게 프로젝트 관련된 이름과 package 이름도 설정해 준 후, 필요한 dependency들을 세팅해 줍니다. 현재로서 필요한 dependency는 spring-boot-starter-web 뿐입니다. 막상 세팅을 하지 않았다고 해도 나중에 pom.xml에 추가할 수 있으니 너무 걱정하지 않아도 됩니다. 다 세팅한 이후에 directoryStructure를 보면, Application.java file이 src/main/java directory안에 생성되어 있는 것을 볼 수 있습니다. 가장 빠르게 hello wor..

JPA 를 이용한 Spring Security 로그인 구현(H2 DB)

오늘은 드디어 JPA를 사용하여 H2 데이터베이스에 있는 유저 정보를 이용해서 로그인을 구현해 보도록 하겠습니다. 일단 UserRepository를 만듭니다. package com.myBoard.demo.model; import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; public interface UserRepository extends JpaRepository { Optional findByUserName(String userName); } UserRepository는 Interface로써, 실제 함수가 아니라, 함수를 정의해 놓은 것에 불과합니다. Repository 패턴을 왜 사용하는지, 또 ..

Spring Security 를 이용해서 UserDetailService 사용하기

이 포스팅은 지난 포스팅에서 이어서 나온 내용입니다. 지난 포스팅에서는 WebSecurityConfig를 만들어서 커스텀 로그인을 만들었습니다. home과 / 는 로그인을 하지 않아도 접속하게 만드는 것이 저번 포스팅까지 하였습니다. package com.myBoard.demo; // import 생략... @EnableWebSecurity public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Override public void configure(WebSecurity web) throws Exception { web.ignoring().antMatchers("/css/**", "/vendor/**", "/js/**", "/imag..

Spring Security 사용하기 - WebSecurityConfig 파일 구성하기

Spring Security를 활용해서 custom login page를 만드는 법을 배웠는데, webSecurityConfig file에 대해서 알아보겠습니다. package com.myBoard.demo; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; @Enable..