Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ZOZOTOWNの商品の閲覧を支えるJava

FUJIMOTO Takuya
March 23, 2023
920

 ZOZOTOWNの商品の閲覧を支えるJava

FUJIMOTO Takuya

March 23, 2023
Tweet

Transcript

  1. ZOZOTOWNの商品の閲覧を

    支えるJava

    2023-03-23 ZOZO Tech Meetup〜Java活用事例紹介〜



    株式会社ZOZO

    技術本部 ECプラットフォーム部 マイグレーションブロック

    藤本 拓也
    Copyright © ZOZO, Inc.
    1

    View Slide

  2. © ZOZO, Inc.
    Agenda

    ● ロードマップにおける現在地

    ● 商品情報を扱うサービスのこれまで

    ● これから構築していく商品基盤

    ● まとめ

    2

    View Slide

  3. © ZOZO, Inc.
    ロードマップにおける現在地

    3

    View Slide

  4. © ZOZO, Inc.
    ロードマップにおける現在地






    ZOZO開発組織の2022年の振り返りと現状 - Qiita (https://qiita.com/sonots/items/eaec792b4ee41ad7ef1b)



    4

    View Slide

  5. © ZOZO, Inc.
    ロードマップにおける現在地






    ZOZO開発組織の2022年の振り返りと現状 - Qiita (https://qiita.com/sonots/items/eaec792b4ee41ad7ef1b)



    5
    参照系基盤

    View Slide

  6. © ZOZO, Inc.
    ロードマップにおける現在地






    ZOZO開発組織の2022年の振り返りと現状 - Qiita (https://qiita.com/sonots/items/eaec792b4ee41ad7ef1b)



    6
    BFF
    検索基盤
    カート決済
    リプレイス

    View Slide

  7. © ZOZO, Inc.
    商品情報を扱うサービスのこれまで

    7

    View Slide

  8. © ZOZO, Inc.
    商品情報を主に扱うサービス(FrontAPI)


    商品情報を扱うサービスのこれまで

    8
    FrontAPI
    SQL Server
    Procedure
    SQL

    ● FrontAPIはマイクロサービス構想以前に作り始められていた

    ● ストアドプロシージャからの移行を主目的としていた

    VBScript

    View Slide

  9. © ZOZO, Inc.
    商品情報を扱うサービスのこれまで

    9
    FrontAPIのアプリケーションの構成

    


    ● Java

    ● Spring Boot

    ● MyBatis

    ● SQL Server

    ● JUnit

    ● Testcontainers

    @Controller
    @Service
    @Mapper
    SQL Server

    View Slide

  10. © ZOZO, Inc.
    商品情報を扱うサービスのこれまで

    10
    コードの例

    ここで値やモデルの変換などを行っている

    View Slide

  11. © ZOZO, Inc.
    商品情報を扱うサービスのこれまで

    11
    FrontAPIが使われているところ(一部)

    



    View Slide

  12. © ZOZO, Inc.
    商品情報を扱うサービスのこれまで

    12
    FrontAPIの普段の取り組み


    ● FrontAPIを作成してから長い期間が経過している

    ● 大変になっているところもある

    ● 課題はGitHubのIssueとして積み上げている

    ● 週一で解消する会をやっている

    ○ Testが足りないところを追加したり

    ○ ビルドツールをMavenからGradleに置き換えたり


    View Slide

  13. © ZOZO, Inc.
    これから構築していく商品基盤

    13

    View Slide

  14. © ZOZO, Inc.
    これから構築していく商品基盤








    ZOZO開発組織の2022年の振り返りと現状 - Qiita (https://qiita.com/sonots/items/eaec792b4ee41ad7ef1b)



    14
    商品基盤構築

    View Slide

  15. © ZOZO, Inc.
    これから構築していく商品基盤

    15
    商品情報を扱うサービスに特化させていく


    主な課題

    商品情報以外の機能を持っている


    FrontAPI
    検索
    おすすめ
    商品情報
    検索基盤
    検索
    推薦基盤
    お知らせ
    商品基盤

    View Slide

  16. © ZOZO, Inc.
    これから構築していく商品基盤

    16
    アプリケーションの構成(検討中)

    


    ● Java

    ● Spring Boot

    ● (未定) 永続化フレームワーク (MyBatis or Doma2 ?)

    ● (未定) Database (MySQL?)

    ● JUnit (+ Spock Framework?)

    ● ArchUnit

    Database?
    ”OpenJDK Wiki”(https://wiki.openjdk.org/display/duke/Gallery)

    “Spring”(https://spring.io)


    View Slide

  17. © ZOZO, Inc.
    これから構築していく商品基盤

    17
    ArchUnitを使って実現したいこと

    


    Package間の依存関係をチェック

    プレゼンテーション層のパッケージ
    ユースケース層のパッケージ
    ドメイン層のパッケージ
    プレゼンテーション層は自分自身のみ参照できる
    ユースケース層はプレゼンテーション層からのみ参照できる
    ドメイン層はいずれからも参照できる

    View Slide

  18. © ZOZO, Inc.
    これから構築していく商品基盤

    18
    ArchUnitを使って実現したいこと

    


    ◯◯DateTime.now()を使わないように

    使っても良いクラスを制限
    各メソッドで◯◯DateTimeのクラスを
    使っているか?
    使っているのは◯◯DateTimeの
    now()メソッドか?
    使っていたらテストエラーとして登録する

    View Slide

  19. © ZOZO, Inc.
    これから構築していく商品基盤

    19
    その他の展望(ネイティブイメージの作成)

    


    ● これまでのJavaで作られたサービスはKubernetes上で実行されている

    ● Goなどと比べるとどうしても立ち上がりは遅い

    ● Spring Boot 3.0からネイティブイメージの作成がサポート

    ● これまでよりも素早いスケールを目標に


    View Slide

  20. © ZOZO, Inc.
    まとめ

    20

    View Slide

  21. © ZOZO, Inc.
    まとめ

    21
    ● ZOZOTOWNの商品を閲覧するとき、裏ではJavaが使われている

    ● ストアドプロシージャから移行した当時と状況が変わってきている

    ● 日々の保守を行いつつ、商品情報に特化したサービスへと変化させていく

    ● 一緒にサービスを支えていく仲間を募集中



    ZOZOTOWN バックエンドエンジニア(マイクロサービス)
    https://hrmos.co/pages/zozo/jobs/0000005

    View Slide