본문 바로가기
728x90
SMALL

Java46

네이버 금융페이지를 몽땅 가져와보자! - 자바 크롤링(java)_1 안녕하세요! 개인프로젝트의 일부분 중 하나인 크롤링에 대해서 공부해보겠습니다! 그리고 대상은 지금이제 처음 공부를 시작하셨거나 자바 초급수준이신 분들을 위한 난이도로 설명하겠습니다. 현재 글은 개인 프로젝트로 과제, 학원 등 웹페이지를 크롤링하는 것을 이용하려는 분들을 위함입니다. 상업적인 용도가 아닌 개인적인 용도로만 사용하시는 것을 추천드립니다....ㅎㅎ 크롤링이란 간단하게 말씀드리자면 웹페이지의 소스를 java에서 String 또는 Document(라이브러리에 있음) 타입으로 모두 가져와서 필요한 정보들을 각 태그 또는 id, class 등 각 엘리먼트들 또는 속성에 따라 가져올 수 있습니다. 우선적으로 크롤링에 앞어서 필요한 라이브러리 설치와 사용방법에 대해 숙지하신 후 함께 하시는걸 추천드립니다.. 2022. 3. 17.
스프링 시큐리티 통합 -1 구현 내용 (시큐리티 통합 주제로) 1. JWT 인증 로직 구현 2. 패스워드 암호화 로직 구현 1. JWT 생성 및 반환 구현 사용자 정보를 바탕으로 헤더와 페이로드를 작성하고 전자 서명한 후 토큰을 리턴하도록 해야합니당 구현을 위해 JWT 관련 라이브러리를 디펜던시에 추가해야해요! build.gradle의 dependencies 부분에 jjwt 라이브러를 추가해줍시닷! // https://mvnrepository.com/artifact/io.jsonwebtoken/jjwt implementation group: 'io.jsonwebtoken', name: 'jjwt', version: '0.9.1' 이제 보안을 제대로 구현하기위해 security 패키지를 만듭시다!! 이 패키즈는 인증과 인가를 위한 .. 2021. 12. 8.
java.util.function 패키지 대부분의 메서드는 타입이 비슷하다. 매개변수가 없거나 한 개 또는 두개 , 반환 값은 없거나 한개 , 게다가 지네릭 매서드로 정의하면 매개변수나 반환 타입이 달라도 문제가 되지 않는다. 그래서 java.uitl.function 패키지에 일반적으로 자주 쓰이는 형식의 메서드를 함수형 인터페이스로 미리 정의해 놓았다. 매번 새로운 함수형 인터페이스를 정의하지 말고, 가능하면 이 패키지의 인터페이스를 사용한다. -> 그래야 함수형인터페이스에 정의된 메서드 이름도 통일되고, 재사용성이나 유지보수 측면에서도 좋습니다. 기본적인 함수형 인터페이스 함수형 인터페이스 메서드 설명 java.lang.Runnable void run() 매개변수도 없고, 반환값도 없음 Supplier T get() -> T 매개변수는 없고.. 2021. 12. 8.
함수형 인터페이스 함수형 인터페이스 단 하나의 추상 메서드만 선언된 인터페이스이다. 예를 들면 interface MyFunction{ public abstract int max(int a, int b); } 인터페이스에 선언된 메서드는 추상메서드 이고, 이게 하나밖에 없으니 함수형 인터페이스라고 한다. 그리고 이렇게 함수형 인터페이스인 경우에는 @FunctionalInterface라고 어노테이션을 붙여야한다. 안붙여도 에러는 안나지만, 붙이면 함수 인터페이스를 올바르게 작성했는지 컴파일러가 확인해준다. 그래서 붙여주는것이 좋다. 지금 함수형 인터페이스에서 max라는 함수를 가지고있고 이것을 구현하면 MyFunction f = new MyFunction(){ public iont max(int a, int b){ retur.. 2021. 12. 7.
백엔드 서비스 아키텍처 말은 거창하게 서비스 아키텍처라고 사용하였다. Model/Entitt와 DTO클래스 Controller, Service, Persistence 클래스 테스팅용 REST API 에 대해 실습을 하면서 설명은 설명을 위주로하는 카테고리에서 하도록 하겠다. 오 프로젝트에서는 모델과 엔티티를 한 클래스에 구현한다. 따라서 모델은 비즈니스 데이터를 담는 역할과 데이터베이스의 테이블과 스키마를 표현하는 두 역할을 한다. 큰 애플리 케이션의 경우 모델과 엔티티를 따로 구현하지만 우리는 규모가 작으므로 합쳐서 구현하는 것이다. 이 모델/엔티티의 이름은 TodoEntity이고, Todo리스트의 한 아이템에 해당한다. TodoEntity를 작성하기에 앞서 model 패키지 com.unoSpringBoot.study.mod.. 2021. 11. 22.
람다식 자바가 1996년에 처음 등장한 이후로 두 번의 큰 변화가 있었다. 지네릭스의 등장과 람다식의 등장이다. 람다식의 도입으로 인해, 객체지향언어인 동시 함수형 언어가 되었다. 즉 OOP와 함수형 동시가지고있다. 함수형 언어라기엔 기능이 조금 약하고, 유명한 함수언어는 Haskell, Scala 등 엄청난 데이터를 처리하기 위해 함수형언어가 필요하게 되었다. 지금 파이썬도 그렇고 JS도 그렇고 함수형언어 기능을 가지고있다. 현재 자바를 배우고있지만 함수형언어의 기능이 다른 함수형언어를 배울때 도움이 많이 될것이다. 람다식이란? 메서드를 하나의 '식'으로 표현한 것이다. 함수를 간략하면서도 명확한 식으로 표현할 수 있게 해준다. 메서드를 람다 식으로 표현하면 메서드의 이름과 반환값이 없어지므로, 람다식을 '익.. 2021. 11. 2.
객체지향의 원리 1. 캡슐화 캡슐화 (encapsulation) 캡슐화된 객체의 세부 내용이 외부에 은폐되어 변경이 발생해도 오류의 파급효과가 적음 캡슐퐈된 객체들은 재사용이 용이함 인터페이스가 단순해지고, 객체간의 결합도가 낮아짐 객체를 캡슐화하여 what만 보여주고, how는 감춤 객체를 작성할 때 숨겨야하는 정보외 정보를 구분하여 작성함 객체의 사용자는 기능만 알고 사용하여, 어떻게 처리되는지는 은폐된다. (Infomation hiding) 장점 객체에 포함된 정보의 손상과 오용을 막을 수 있다. 객체 조작 방법이 바뀌어도 사용방법은 바뀌지 않는다 데이터가 바뀌어도 다른 객체에 영향을 주지않아 독립성이 유지된다. 처리된 결과만 사용하므로 객체의 이식성이 좋다. 객체의 부품화 할 수 있어 새로운 시스템의 구성에 부품.. 2021. 11. 1.
프로젝트(1) 기존 프로젝트에 그동안 공부했던 스프링 시큐리티를 접목하는 작업을 진행하도록 하겠다. 그전에 해당 기능은 -로그인과 회원 가입 페이지의 작성 - 기존 화면과 컨트롤러에 시큐리티 관련 내용 추가 - Ajax부분의 변경 로그인 페이지 처리 기존의 로그인화면은 정말 끔찍하다.. 어쩌면 스프링에서 기본으로 주는화면급이었다. 똑같았다 그냥 그럼 조금 이쁘게 부트스트랩을 적용하고, 아까의 로그인의 화면의 태그라던가 id는 동일하게 설정한뒤 생성해보았다. Please Sign In Remember Me Login 폼태그가 붙고, 거기에 컨테이너 div가 붙고 해서 뭔가 복잡해 보이는데 화면으로보면 크게 달라진것은 없다. 귀찮다면 그전의 화면을 계속사용해도 문제는 없다. 하지만 JSTL이나 스프링 시큐리티의 태그를 사.. 2021. 10. 21.
스프링 시큐리티와 JSP JSP에서 로그인한 사용자 정보를 보여주기 /sampl/admin 과 같은 경로는 로그인한 사용자만이 접근할 수 있고, 만일 권한이 적당하지 않으면 볼수 없는 페이지이므로 로그인한 사용자가 접근 했을 때에는 해당 사용자의 여러 정보를 보여줄 필요가 있다. 스프링 시큐리티와 관련된 정보를 출력하거나 사용하려면 JSP상단에 스프링 시큐리티 관련 태그 라이브러리 사용을 선언하고, 태그와 principal이 라는 이름의 속성을 사용한다. 지금현재 있는 JSP파일에 해당 태그를 추가한다. 그리고 해당 사용자의 이름과 아이디, 권한들을 나타날 수 있도록 하기위해 각각의 태그들을 넣어주어 불러온 정보를 화면단에 나타나게 해줄 수 있다. /sample/admin page principal : MemberVO : 사용자.. 2021. 10. 19.
커스텀 UserDetailsService JDBC를 이용하는 방식을 DB를 처리해서 편리하게 사용할 수 있기는 하지만, 제한적인 내용만만을 이용한다는 단점이있다. 스프링 시큐리티에서 username이라고 부르는 사용자의 정보만을 이용하기 때문에 충분하지 실제 프로젝트에서 사용자 의 이름이나 이메일등의 자세한 정보를 이용할 경우에는 부족하다. 이런문제를 해결하기 위해서 직접 UserDeatilasService를 구현하는 방식을 이용한다. 흔히 커스텀 UserDetailsService를 구현하는데, 원하는 객체를 인증과 권한 체크에 활용 할 수 있다. 스프링 시큐리티의 UserDetailsService 인터페이스는 단 하나의 메서드만이 존재한다. loadUserByUsername()이라는 메서드의 반환 타입인 UserDetails 역시 인터페이스로.. 2021. 10. 19.
JDBC를 이용하는 간편 인증/ 권한처리 현실적으로 JDBC를 이용하는 방식을 공부해보자 스프링 시큐리티에서는 사용자를 확인하는 인증과 권한 등을 부여하는 인가 과정으로 나누었다. 인증과 권한에 대한 처리는 크게 보면 Authenitacation Manager를 통해서 이루어진다. 이때, 인증이나 권한 정보를 제공하는 존재가 필요하고, 다시 이를 위해서 UserDetailsService라는 인터페이스를 구현한 존재를 활용한다. 유저 상세서비스는 스프링 시큐리티 API내에 이미 CahingUserDeatilsService, InmemoryIserDetailsmanager, jdbcDaoImpl, jdbcUserDetailManager, LdapUserDetailsManager, LdapUserDetailsService와 같은 구현 클래스들을 제공.. 2021. 10. 18.
로그인과 로그아웃처리(2) 커스템 로그인 페이지 앞서 언급했듯이 스프링 시큐리티에서 기본적으로 로그인페이지를 제공하긴한다. 현실적으로 화면 디자인등의 문제로 사용하기 불편하고 안예쁘다. 때문에 거의 대부분 경우 별도의 URI를 이용해서 로그인 페이지를 제작해서 사용한다. 이를 이용하는 방식은 접근 제한 페이지와 유사하게 직접 특정 URI를 지정할 수 있다. 보이는 바와같이 한줄을 수정 추가해주었다. 이제 로그인화면은 customLogin으로 이동하게 될것이다. login-page속성의 Uri는 get방식으로 접근하는 uri로 지정한다. 그리고 CommonController에 /customLogin에 해당하는 매서드를 추가해준다. @GetMapping("/customLogin") public void loginInput(String.. 2021. 10. 18.
728x90
LIST