개발자 성장 일지

2022.03.27 주말 공부 <크롤링 , Lombok 오류>

NEWDODORIPYO 2022. 3. 27. 17:25

03.25일 금요일... 주말을 앞두고 있어서인지 강의가 끝나고 나서 공부가 손에 잘 잡히지 않아 복습을 못했습니다 그래서 주말에 다시 금요일에 강의했던 내용을 생각해보며 수업을 정리해보려고 합니다 

 

Lombok는 만능이 아니다

LomBok는 편리한 기술이지만 만능은 아니다

최근 멀티 채팅관련한 코딩을 하던 중 그런 문제점에 직면했는데 그건 바로 @Cleanup 이 었다

정산적으로 객체지향으로 코드를 작성했을때는 효율적이지만 익명 클래스 , 람다식 , Thread를 이용하게 된다면 조심해서 사용해야 한다

 

지난 멀티 채팅 코드 중 LomBok의 문제점 돌아보기 

public class MinimalServer2 {
    //bad code
    public static void main(String[] args) throws Exception{

        ServerSocket serverSocket =new ServerSocket(5555);
        System.out.println("ready....");


        while (true) {
            //소켓 연결
            @Cleanup Socket socket = serverSocket.accept();
            //데이터 가져오기
            DataInputStream din = new DataInputStream(socket.getInputStream());
            //데이터 내보내기
            DataOutputStream dos = new DataOutputStream(socket.getOutputStream());

            System.out.println(socket);

            new Thread(() ->{
               while (true) {
                 try{
                     while (true){
                         String clientMsg = din.readUTF();
                         System.out.println(clientMsg);
                     }//end while
                 }catch (Exception e){
                     e.printStackTrace();
                 }
               }
        }).start();

        }//end while
    }
}

@Cleanup 이 걸린 Socket는 쭉 내려가다 new Thread를 만나면 종료가 되어버린다

 

⭐ 위 코드의 완성은 03.24 Group Study에 정리되어 있습니다 

 

 

크롤링 <crawling>

Web상을 돌아다니면서 정보를 수집하는 행위를 뜻한다

JSoup을 이용해서 크롤링하기

JSoup 가져오기

네이버 웹툰 사진 크롤링해보기

⭐<경고!! : 아래 코드는 크롤링의 연습을 위해 작성된 코드이고 나쁘게 사용하면 당연히 불법인 거 아시죠??> ⭐

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;

import java.net.URL;

public class WebToonThumb {
     //bad code
    public static void main(String[] args) throws Exception {
        //Parsing 부분
        String path = "https://comic.naver.com/webtoon/weekday";

        URL url = new URL(path);
        //url 빨아드리고 10초 여유주기
        Jsoup.parse(url , 10000);
        //Document 는 사용되는 부분이 많아서 신경써줘야한다
        //import org.jsoup.nodes.Document 되도록 신경써주기
        Document document = Jsoup.parse(url,10000);
        //Elements 는 배열의 구조의 자료를 가져올때 사용된다
        // css 클래스를 찾을때 . 을 사용한다
       Elements elements= document.select(".thumb a img");

       //문서안에 thumb size 확인해보기
       System.out.println(elements.size());

      elements.stream().forEach(element -> {
           //element
           String thumbLink = element.attr("src"); //element.attr < > 안에 있는 내용물을 가져올때 사용
           System.out.println(thumbLink);
       });
    }
}

Parsing

parsing은 구문 분석이라고 합니다. 문장이 이루고 있는 구성 성분을 분해하고 분해된 성분의 위계 관계를 분석하여 구조를 결정하는 것입니다. 즉 데이터를 분해 분석하여 원하는 형태로 조립하고 다시 빼내는 프로그램을 말합니다. 웹상에서 주어진 정보를 내가 원하는 형태로 가공하여 서버에서 불러들이는 것입니다.

이러한 parsing 기법은 XML parsing과 JSON parsing이 있습니다.

썸네일 파일 경로

<div thumb> → <a> → <img>

. attr()

. attr()은 요소(element)의 속성(attribute)의 값을 가져오거나 속성을 추가합니다.

'개발자 성장 일지' 카테고리의 다른 글

2022.03.29 수업일지  (0) 2022.03.29
2022.03.28 Servlet 그리고 모델 1 , 모델 2  (0) 2022.03.28
2022.03.24 ⭐DB 그리고 객체지향의 문제점  (0) 2022.03.25
2022.03.24 수업일지  (0) 2022.03.24
2022.03.23 채팅 IO  (0) 2022.03.23